2010-05-26 39 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