XML解析抛出java.lang.OutOfMemoryError:超出了GC开销限制

时间:2015-08-17 06:28:41

标签: java xml-parsing garbage-collection xstream

我正在解析大小为2GB的XML文件。对于解析使用Xstream库, 它等了5分钟,然后扔java.lang.OutOfMemoryError: GC overhead limit exceeded

您能提供解析大量XML文件的解决方案吗? 您能否提供更快地解析XML文件的替代方法。

更新: 我已经使用JaxB + Stax解析器来解决性能并解决了java.lang.OutOfMemoryError:GC开销限制超出异常。

2 个答案:

答案 0 :(得分:1)

你应该选择一个解析器,它不会将整个xml加载到内存中。

SAX或者如果您只对xml的一个子集感兴趣,那么就是Stax。

即使在这些情况下,您解析的数据也会被您所选择的数据结构填充,从而阻塞您的内存。

您应该查看以下答案How to Parse Big (50 GB) XML Files in Java

答案 1 :(得分:0)

您可以使用SAX解析器,它不会将整个文件保存在内存中,并且只保留一些尚未关闭的标记等内容,以便以错误的顺序捕获后续错误,例如结束标记。

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html

由于整个文件不在内存中,因此不保证在启动时验证xml文件。阅读有关解析器here的更多信息。