2010-05-26 111 views
2

我收到內存不足的錯誤:內存泄漏與JAXB

 
Memory Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
     at org.apache.xerces.dom.CoreDocumentImpl.createElement(CoreDocumentImpl.java:564) 

我有一個從數據庫獲取數據,並使用DOM的XML文件中的獨立Java程序。我得到上面的錯誤,如果數據提取是巨大的,在我的情況下它是> 1,000,000記錄。

我從unix調用Java類時定義了2GB作爲堆大小。

我用JAXB試過了,但還是沒有任何明顯的改進。

任何建議如何改善代碼。

+1

你爲什麼認爲有內存泄漏?如果您使用DOM,您將立即將整個文檔加載到內存中。如果文檔很大,你的程序將使用大量的內存,你可能會得到一個'OutOfMemoryError'。該錯誤不會自動錶示存在內存泄漏。 – Jesper 2010-05-26 11:28:19

回答

6

您應該避免一次將整個文件加載到內存中。爲此,請從使用DOM切換到另一種技術,例如 SAX或 StAX。它是一個流媒體API,因此更適合處理大量的XML數據。

編輯: SAX不支持書寫,因此這裏不適用。

+0

@ Joachim - 我厭倦了JAXB,但沒有看到任何改進。你能否提供一些示例代碼如何使用SAX。我是這個新手。 – Anurag 2010-05-26 09:20:46

+0

試試本教程:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPSAX.html – 2010-05-26 09:26:06

+1

我沒有建議JAXB,但如果您真的想使用它,那麼[本文檔] (https://jaxb.dev.java.net/guide/Dealing_with_large_documents.html)可能會提供有用的提示。 – 2010-05-26 09:41:19