DOM中的java.lang.OutOfMemoryError

DOM中的java.lang.OutOfMemoryError,java,xml,dom,testing,Java,Xml,Dom,Testing,我试图测试不同的解析器,当我试图解析70MB的xml文件时,我遇到了DOM问题。错误为java.lang.OutOfMemoryError 我想我有一台像样的电脑,所以我不确定是否有问题 另一个问题。我用秒表来计时,但我想我把秒表放错地方了。我想应该就在那之后 Document document = builder.parse("file.xml"); 我把它放在for循环之后,它会打印出所有节点 谢谢解决方案取决于您收到的java.lang.OutOfMemoryError的类型。如果是P

我试图测试不同的解析器,当我试图解析70MB的xml文件时,我遇到了DOM问题。错误为java.lang.OutOfMemoryError 我想我有一台像样的电脑,所以我不确定是否有问题

另一个问题。我用秒表来计时,但我想我把秒表放错地方了。我想应该就在那之后

Document document = builder.parse("file.xml"); 
我把它放在for循环之后,它会打印出所有节点


谢谢

解决方案取决于您收到的java.lang.OutOfMemoryError的类型。如果是PermGen空间,则需要将以下参数添加到JVM中,以便在示例中将PermGen设置为300 MB:

-XX:MaxPermSize=300m
如果是Java堆空间,请添加此参数,以将堆空间设置为1 GB:

-Xmx1024m

解决方案取决于您收到的java.lang.OutOfMemoryError的类型。如果是PermGen空间,则需要将以下参数添加到JVM中,以便在示例中将PermGen设置为300 MB:

-XX:MaxPermSize=300m
如果是Java堆空间,请添加此参数,以将堆空间设置为1 GB:

-Xmx1024m

使用默认堆大小并解析大型XML文档时的常见问题。您需要增加JVM的堆大小。在执行程序时,添加参数-Xmx1024m或-Xmx512m或您认为需要的任何参数,堆将只占用jvm命令指定点所需的内存

示例:java-Xmx1024m-jarmyprogram.jar


这也可以在各种IDE的运行时属性中设置。在eclipse中,它是应用程序运行配置的VM参数部分。

如果使用默认堆大小并解析大型XML文档,则是常见问题。您需要增加JVM的堆大小。在执行程序时,添加参数-Xmx1024m或-Xmx512m或您认为需要的任何参数,堆将只占用jvm命令指定点所需的内存

示例:java-Xmx1024m-jarmyprogram.jar


这也可以在各种IDE的运行时属性中设置。在eclipse中,它是应用程序运行配置的VM参数部分。

此外,如果要处理大型XML文档,可能需要尝试其他方法。决定因素是您是否需要同时在内存中保存整个文档。为了节省空间,您可以单独解析XML的各个部分

这称为流式XML解析器。您将需要搜索一些不同的Java流XML解析器。我首先想到的是StAX,它是规范。一个常见的util是apacheaxiom


此外,如果要处理大型XML文档,可能需要尝试另一种方法。决定因素是您是否需要同时在内存中保存整个文档。为了节省空间,您可以单独解析XML的各个部分

这称为流式XML解析器。您将需要搜索一些不同的Java流XML解析器。我首先想到的是StAX,它是规范。一个常见的util是apacheaxiom


另一个建议:您可能想查看ScaleDOM,它允许解析非常大的XML文件:


由于XML节点的延迟加载,ScaleDOM的内存占用很小。它仅将XML文档的一部分保留在内存中,并在必要时从源文件重新加载节点。

另一个建议:您可能希望签出ScaleDOM,它允许解析非常大的XML文件:


由于XML节点的延迟加载,ScaleDOM的内存占用很小。它只将XML文档的一部分保存在内存中,并在必要时从源文件重新加载节点。

我正在尝试测试不同的解析器。我将对SAX和StAXIf做同样的处理,JAXB的内存不是问题。它内置于Java中,并进行Java对象映射。SAX已经过时,而且很麻烦。我正在尝试测试不同的解析器。我将对SAX和StAXIf做同样的处理,JAXB的内存不是问题。它内置于Java中,并进行Java对象映射。SAX已经过时且笨重。