2017-09-11 3 views
1

을로드하는 동안 메모리를 정리하는 데 실패합니다. 디렉터리에 500 개의 홀수 .owl 파일이 있고 for 루프 내의 OWL API loadOntologyFromOntologyDocument() 메서드를 사용하여 하나씩 메모리에로드합니다. 그러나, 메소드가 몇몇 온톨로지를로드 한 후에, 메모리는 고갈되기 시작한다. 사용되지 않는 개체 참조는 가비지 수집기에서 정리되지 않습니다. 나는 문제를 봤는데 -Xmx 힙 크기를 최대 5GB까지 많은 제안을 사용합니다. 그러나 문제는 여전히 지속됩니다. 이 점에 대해 어떤 도움을 주셔서 감사합니다.자바 가비지 컬렉터는 내 응용 프로그램에서 <strong>의 I로드와 <strong>.owl</strong> 파일들을 처리하려고 할 때마다 java.lang.OutOfMemoryError와</strong>을 문제를 직면하고 온톨로지 파일

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

5GB는 실제로 받아 들일만한 것이 아닙니다. 1024, 2048 등을 사용해보십시오. 내 경험에 의하면, 4K는 작동하기 위해 결코 극복되어서는 안되며, –

+0

5 기가비트 또는 다른 어떤 번호가 작동해도 표준 2^n 번호 일 필요는 없습니다. 그러나 코드 (또는'OWLOntologyManager')는 실제로 그 메모리를 사용할 것입니다. 파일의 크기는 얼마이며 파일의 개수는 몇 개입니까? – Zilvinas

답변

0

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

깨지 않고 작동했습니다. 고맙습니다. – user8594397

+0

@ user8594397 Javadoc은 "OWLOntologyManager는 온톨로지와 온톨로지 문서 간의 매핑을 관리합니다"라고 말합니다. 그러한 매핑을 관리하기 위해서는로드 된 모든 데이터를 유지해야합니다. – maaartinus