Java-堆空间不足,无法解析大型XML文件

Java-堆空间不足,无法解析大型XML文件,java,eclipse,Java,Eclipse,我的XML解析器有问题。 我需要读取和解析433kb的XML文件,为此,我编写了两个java类。 一个类使用SAX,另一个使用JDOM2 为了测试,如果我的类可以读取该文件,我首先只打印出根节点的名称 问题出在哪里?没有足够的堆空间 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.sun.org.apache.xerces.internal.parsers.XML11Configurati

我的XML解析器有问题。 我需要读取和解析433kb的XML文件,为此,我编写了两个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 尽管10.24亿美元还不够。所以我需要将其设置为2048,最好设置为4096,只是为了确定

它仍然不起作用,现在它给了我这个错误:

初始化VM时出错 无法为对象堆保留足够的空间

我有一个64位系统,i3双核,16GB DDR3 RAM,目前有11.2GB可用


我没有主意了,有人能帮忙吗?

您可以增加堆大小

java -Xmx2g myprogram

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

433KB文件?然后你就有了一个漏洞或者一个配置错误的JVM。你能提供你用来解析它的代码吗?还有,你使用的是什么操作系统?我不想透露我的代码,它充满了我不允许透露的信息。但是我可以发布我使用过的指南:至于我的操作系统,我使用的是windows 8.1 64位。我已经尝试过了,第二个错误发生在我超过1024m时。因此,您的计算机可能没有足够的内存来存储这个文件。64位jdk应该能够超过1024位。您确定您使用的是64位jdk吗?正如我在问题中所说的,我有16 GB内存,其中10 GB以上是可用的。@Thomas:谢谢您的建议。我非常确定,我有64位版本的JDK1.7,我确定,我在电脑上安装必要的软件时使用64位版本。但是你的想法给我带来了另一个想法:升级到JDK1.8,现在它可以工作了。所以要么是新安装的JDK起了作用,要么是我在第一次安装时使用32位JDK1.7犯了错误。它现在可以工作了,感谢你朝着正确的方向努力。