XML Parsing throwing java.lang.OutOfMemoryError: GC overhead limit exceeded
XML Parsing throwing java.lang.OutOfMemoryError: GC overhead limit exceeded
我正在解析 XML 大小为 2GB 的文件。对于使用 Xstream 库进行解析,
它等待 5 分钟然后抛出 java.lang.OutOfMemoryError: GC overhead limit exceeded
.
您能否提供解析大量 XML 文件的解决方案。
您能否提供替代方法来更快地解析 XML 文件。
更新:
我已经使用 JaxB+Stax 解析器来解决性能问题并解决了 java.lang.OutOfMemoryError: GC overhead limit exceeded exception.
您可以使用 SAX 解析器,它不会将整个文件保存在内存中,并且只保留一些尚未关闭的标记之类的东西,以便捕获以后的错误,例如错误顺序的结束标记。
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html
由于整个文件不会在内存中,因此不能保证 xml 文件在开始时的有效性。阅读更多关于解析器 here.
您应该使用不会将整个 xml 加载到内存中的解析器。
SAX 或者如果您只对 xml 的一个子集感兴趣,那么 Stax。
即使在这些情况下,您的内存也可能被您解析并填充到您选择的数据结构中的数据所阻塞。
你应该看看下面的答案How to Parse Big (50 GB) XML Files in Java
我正在解析 XML 大小为 2GB 的文件。对于使用 Xstream 库进行解析,
它等待 5 分钟然后抛出 java.lang.OutOfMemoryError: GC overhead limit exceeded
.
您能否提供解析大量 XML 文件的解决方案。 您能否提供替代方法来更快地解析 XML 文件。
更新: 我已经使用 JaxB+Stax 解析器来解决性能问题并解决了 java.lang.OutOfMemoryError: GC overhead limit exceeded exception.
您可以使用 SAX 解析器,它不会将整个文件保存在内存中,并且只保留一些尚未关闭的标记之类的东西,以便捕获以后的错误,例如错误顺序的结束标记。
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html
由于整个文件不会在内存中,因此不能保证 xml 文件在开始时的有效性。阅读更多关于解析器 here.
您应该使用不会将整个 xml 加载到内存中的解析器。
SAX 或者如果您只对 xml 的一个子集感兴趣,那么 Stax。
即使在这些情况下,您的内存也可能被您解析并填充到您选择的数据结构中的数据所阻塞。
你应该看看下面的答案How to Parse Big (50 GB) XML Files in Java