2016-08-05 13 views
1

サイズが350 MBを超える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

ヒープにすべて収まらない場合は、OOMEにつながる可能性のあるすべてのノードをメモリに保存する代わりに、ターゲットノードをオンザフライで処理できるように、メモリ消費の少ないアプローチを試すことができます。現在のもの。ここで

は、それが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); 

詳細。

関連する問題