2015-08-17 112 views
0

我正在解析大小爲2GB的XML文件。對於使用Xstream Library進行分析, 等待5分鐘,然後投擲java.lang.OutOfMemoryError: GC overhead limit exceededXML解析拋出java.lang.OutOfMemoryError:超出GC開銷限制

您能否提供解決方案來解析大量的XML文件。 你能否提供替代解析XML文件的速度更快?

更新: 我已經完成了使用JaxB + Stax解析器來解析性能並解決java.lang.OutOfMemoryError:超出GC開銷限制的異常。

+2

顯示你的代碼。你的JVM內存設置是什麼?請閱讀http://stackoverflow.com/help/how-to-ask – reto

回答

1

你應該去一個解析器,而不會將整個xml加載到內存中。

SAX或者如果您只對xml的一個子集感興趣,那麼Stax。

即使在這些情況下,您的內存也會被您解析和填充到您選擇的數據結構中的數據堵塞。

你應該看看下面的答案How to Parse Big (50 GB) XML Files in Java

0

您可以使用SAX解析器,該解析器不會在內存中保存整個文件,並且只保留一些諸如尚未關閉的標記之類的東西,以便以錯誤順序捕獲後面的錯誤,如結束標記。

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html

由於整個文件不會在內存中,它並不能保證XML文件的驗證在啓動。閱讀更多關於解析器here

+0

SAX是基於事件的。使用StAX可能會更容易一些,它是一個可以處理大文件的解析器:https://docs.oracle.com/javase/tutorial/jaxp/stax/index.html – Andreas

相關問題