从文档加载本体需要花费太多时间并占用我所有的内存空间

时间:2013-07-30 07:45:13

标签: java semantic-web ontology owl

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

代码如下所示:

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如何解决问题:

  • 确保JVM分配了足够的内存:使用-Xmx-Xms标记。
  • 从系统加载文件(示例/home/foo/bar.owl),而不是从localhost代理加载。
  • 您提到了线程问题:确保一次只有一个线程读取该文件。 API负责为您提供线索。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您只是在多线程环境中运行代码时才发现问题,那么您可能会在这方面偶然发现一些OWL API错误,过去这是因为HashMaps在各个地方用作缓存而且如果对地图的更改与读取访问同时发生,则导致线程卡住。

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