我每次试图加载和处理一堆.owl文件的时间面临的问题java.lang.OutOfMemoryError在我的应用程序。我在一个目录中有500个奇怪的.owl文件,我在for
循环中使用OWL API的loadOntologyFromOntologyDocument()
方法将它们逐个加载到内存中。但是,在方法加载一些本体之后,内存开始耗尽。未使用的对象引用没有被垃圾收集器清理。我搜索了这个问题,并且使用了-Xmx来增加许多人建议的堆大小到5GB。但问题仍然存在。我感谢在这方面的任何帮助。Java垃圾收集未清理内存在加载本体文件
OWLOntologyManager owlManager = OWLManager.createOWLOntologyManager();
File folder = new File("G:\\OWL and OBO");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " + listOfFiles[i].getName());
try{
File sourceFile = new File("G:\\OWL and OBO\\" + listOfFiles[i].getName());
OWLOntology ontology = owlManager.loadOntologyFromOntologyDocument(sourceFile);
} catch(Exception e){
e.printStackTrace();
}
}
}
5gb不是jvm真的会接受的。尝试使用1024,2048和更多。我的经验是,4k不应该克服工作 –
5GB或任何其他号码将工作,它不一定是一个标准的2^n号码。但是,您的代码(或“OWLOntologyManager”)实际上可能正在使用该内存。什么是文件的大小和你有多少文件? – Zilvinas