0

我正在尝试使用 org.semanticweb.owlapi.model.OWLOntologyManager.loadOntologyFromOntologyDocument 方法在 java 中加载本体。当我运行代码时,加载本体大约需要一分钟,有时会导致内存不足的错误。我想原因是本体非常大。有没有办法解决这个问题?也许只加载本体的基本部分?

代码如下所示:

String prefix = "http://localhost:8888/ontologies/myOntology.owl#"
iri = IRI.create(prefix);
ontology = manager.loadOntologyFromOntologyDocument(iri);
4

4 回答 4

1

我自己想通了。我仍然不知道确切的原因,但不知何故,问题是由多线程执行此代码引起的,而不是由加载本体本身引起的。当我在没有多线程的情况下运行代码时,加载只需要几秒钟

于 2013-07-30T09:03:43.920 回答
1

您的本体不是那么大(如果 200 个类 - 根据文献的大类有超过 300'000 个类),并且您不应该在现代机器上使用 OWL-API 遇到任何内存问题(至少 2 Go 内存)。

如何解决问题:

  • 确保 JVM 有足够的内存分配给它:使用-Xmxand-Xms标志。
  • /home/foo/bar.owl从系统(示例)而不是从localhost代理加载文件。
  • 您提到了线程问题:确保一次只有一个线程读取文件。API 会为您处理线程读取。
于 2013-07-30T20:07:35.093 回答
0

我猜如果你正在加载一个巨大的本体,缓慢是不可避免的,但你可以尝试增加分配给 Java 的内存,如此处所示这样至少你知道本体将被加载。

于 2013-07-30T12:32:58.207 回答
0

如果您仅在多线程环境中运行代码时才看到问题,那么您有可能在这方面偶然发现了一些 OWL API 错误,过去这是由于 HashMap 在各个地方用作缓存并导致线程如果地图更改与读取访问同时发生,则会卡住。

200 个类是一个相当小的本体,所以它应该需要几秒钟。如果您能始终如一地重现这种情况,请在 github 或 OWLAPI 邮件列表上将其报告为错误。

于 2013-09-17T18:05:20.277 回答