我正在解析大小为2GB的XML文件。对于解析使用Xstream库,
它等了5分钟,然后扔java.lang.OutOfMemoryError: GC overhead limit exceeded
。
您能提供解析大量XML文件的解决方案吗? 您能否提供更快地解析XML文件的替代方法。
更新: 我已经使用JaxB + Stax解析器来解决性能并解决了java.lang.OutOfMemoryError:GC开销限制超出异常。
答案 0 :(得分:1)
你应该选择一个解析器,它不会将整个xml加载到内存中。
SAX或者如果您只对xml的一个子集感兴趣,那么就是Stax。
即使在这些情况下,您解析的数据也会被您所选择的数据结构填充,从而阻塞您的内存。
答案 1 :(得分:0)
您可以使用SAX解析器,它不会将整个文件保存在内存中,并且只保留一些尚未关闭的标记等内容,以便以错误的顺序捕获后续错误,例如结束标记。
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParser.html
由于整个文件不在内存中,因此不保证在启动时验证xml文件。阅读有关解析器here的更多信息。