我的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内存。
我没有想法,有人可以帮忙吗?
答案 0 :(得分:1)
您可以增加堆大小
java -Xmx2g myprogram
答案 1 :(得分:0)
尝试使用StAX来解析xml。 StAX是一个流式api,允许你“解析”xml,这样就不必将整个文档读入内存