2016-08-05 5 views
1

크기가 350MB 이상인 XML 파일을 구문 분석하는 동안 "java.lang.OutOfMemoryError : JAVA 힙 공간"오류가 발생했습니다.XML 구문 분석에서 메모리 부족 오류가 발생했습니다.

PFB 코드 스 니펫 :이 평가하려고하는 마지막 줄에서

File file = new File("D:\WS\data.xml"); 
InputSource source = new InputSource(new FileInputStream(file)); 
XPathFactory xPathFact = XPathFactory.newInstance(); 
XPath xPath = xPathFact.newXPath(); 
XPathExpression expr = xPath.compile("//person"); 
NodeList nodeList = (NodeList)expr.evaluate(source, XPathConstants.NODESET); 

나는 점점 오전 오류입니다.

+0

일부 XML- 생성자는 매우 많은 메모리를 소비 할 수 있습니다. xml에서 의심스러운 것을 볼 수 있습니까? – jHilscher

+0

이 포럼 게시물은 유용 할 수 있습니다 https://community.oracle.com/thread/967427?start=0&tstart=0 – SomeStudent

+0

모든 것을 다시 시작하려고 시도 했습니까? –

답변

0

메모리를 적게 사용하는 접근 방식을 시도해 볼 수 있습니다. 실제로 모든 노드를 메모리에 저장하는 대신 대상 노드를 즉시 처리 할 수 ​​있습니다. 모든 노드가 힙에 모두 들어 가지 않으면 OEM으로 이어질 수 있습니다. 현재 하나. 여기

그것이 XMLDog 함께 할 수있는 방법입니다 XMLDog here에 대한

XMLDog dog = new XMLDog(null, null, null); 
dog.addXPath("//person"); 
Event event = dog.createEvent(); 
event.setXMLBuilder(new DOMBuilder()); 
event.setListener(new InstantEvaluationListener(){ 
    @Override 
    public void onNodeHit(Expression expression, NodeItem nodeItem){ 
     Node personNode = (Node) nodeItem.xml; 
     // Treat your person node here 
    } 

    @Override 
    public void finishedNodeSet(Expression expression){} 

    @Override 
    public void onResult(Expression expression, Object result){} 
}); 
File file = new File("D:\WS\data.xml"); 
InputSource source = new InputSource(new FileInputStream(file)); 
dog.sniff(event, source, false); 

자세한 내용.

관련 문제