【问题标题】:Out of Memory Error in XML ParsingXML 解析中的内存不足错误
【发布时间】:2016-08-05 13:25:03
【问题描述】:

我在解析大小超过 350 MB 的 XML 文件时遇到“java.lang.OutOfMemoryError: JAVA Heap Space”错误。

PFB 代码片段:

File file = new File("D:\WS\data.xml");
InputSource source = new InputSource(new FileInputStream(file));
XPathFactory xPathFact = XPathFactory.newInstance();
XPath xPath = xPathFact.newXPath();
XPathExpression expr = xPath.compile("//person");
NodeList nodeList = (NodeList)expr.evaluate(source, XPathConstants.NODESET);

我在尝试评估的最后一行出现错误。

【问题讨论】:

  • 一些 XML 构造可能非常消耗内存。你能在 xml 中看到任何可疑的东西吗?
  • 您是否尝试重新启动所有内容?
  • 您是否为 Java 分配了特定数量的内存?您总是可以添加更多,看看它是否会通电。

标签: java xml parsing


【解决方案1】:

您可以尝试一种内存消耗较少的方法,允许即时处理您的目标节点,而不是将所有节点都放在内存中,如果它们不能全部放入您的堆中,可能会导致 OOME,它只会保留当前的一。

这是使用XMLDog 的方法:

XMLDog dog = new XMLDog(null, null, null);
dog.addXPath("//person");
Event event = dog.createEvent();
event.setXMLBuilder(new DOMBuilder());
event.setListener(new InstantEvaluationListener(){
    @Override
    public void onNodeHit(Expression expression, NodeItem nodeItem){
        Node personNode = (Node) nodeItem.xml;
        // Treat your person node here
    }

    @Override
    public void finishedNodeSet(Expression expression){}

    @Override
    public void onResult(Expression expression, Object result){}
});
File file = new File("D:\WS\data.xml");
InputSource source = new InputSource(new FileInputStream(file));
dog.sniff(event, source, false);

更多关于 XMLDog here.

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2011-12-25
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多