gpt4 book ai didi

Java垃圾收集器在加载本体文件时无法清理内存

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:37 24 4
gpt4 key购买 nike

每次我尝试加载和处理一堆 .owl 文件时,我的应用程序都会遇到 java.lang.OutOfMemoryError 问题。我的目录中有 500 个奇怪的 .owl 文件,我在 for 循环中使用 OWL API 的 loadOntologyFromOntologyDocument() 方法将它们一一加载到内存中。然而,在该方法加载一些本体之后,内存开始耗尽。垃圾收集器不会清除未使用的对象引用。我用 google 搜索了这个问题,并使用 -Xmx 将堆大小增加到许多人建议的 5GB。但问题仍然存在。我感谢这方面的任何帮助。

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();
}
}
}

最佳答案

OWLOntologyManager 可能会占用文件之间的某些内存。您是否尝试过将第一行移动到 listOfFiles 循环内?为每个文件创建一个新实例会“更昂贵”,但这比“损坏”要好。

File folder = new File("G:\\OWL and OBO");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
OWLOntologyManager owlManager = OWLManager.createOWLOntologyManager();
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();
}
}
}

关于Java垃圾收集器在加载本体文件时无法清理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com