Java - 没有足够的堆空间来解析大型XML文件

时间:2014-07-19 11:39:23

标签: java eclipse

我的XML解析器有问题。 我需要读取并解析一个433kb的XML文件,为此,我编写了2个java类。 一个类使用SAX,另一个使用JDOM2。

要测试,如果我的类可以读取文件,我只是打印出根节点名称。

问题?没有足够的堆空间。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
at xmlparser.version.one.ReadXML.main(ReadXML.java:20)

我已经在stackoverflow和其他平台上阅读了很多想法并使用它们。

到目前为止,我已经确定,我的eclipse使用64位JRE,我确保我的环境变量指向64位JRE。 我还尝试在eclipse.ini中扩展eclipe的最大可用内存。 我已经尝试将类本身的可用内存设置为:-Xms512M -Xmx1024M 虽然1024M是不够的。所以我需要将它设置为2048,最好是4096才能确定。

它仍然无法正常工作,现在它给了我这个错误:

  

VM初始化期间发生错误   无法为对象堆保留足够的空间

我有一个64位系统,i3双核,16GB DDR3内存,目前可提供11.2GB内存。

我没有想法,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以增加堆大小

java -Xmx2g myprogram

enter image description here

答案 1 :(得分:0)

尝试使用StAX来解析xml。 StAX是一个流式api,允许你“解析”xml,这样就不必将整个文档读入内存