Java XML解析中内存不足错误

Java XML解析中内存不足错误,java,xml,parsing,Java,Xml,Parsing,在解析一个大小超过350MB的XML文件时,我遇到了“java.lang.OutOfMemoryError:java堆空间”错误 PFB代码段: File file = new File("D:\WS\data.xml"); InputSource source = new InputSource(new FileInputStream(file)); XPathFactory xPathFact = XPathFactory.newInstance(); XPath xPath = xPath

在解析一个大小超过350MB的XML文件时,我遇到了“java.lang.OutOfMemoryError:java堆空间”错误

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);

我在它试图评估的最后一行遇到了错误。

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

以下是如何通过以下方式完成:


关于XMLDog的更多详细信息。

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

以下是如何通过以下方式完成:


关于XMLDog的更多详细信息。

一些XML构造可能非常消耗内存。你能在xml中看到任何可疑的东西吗?这篇论坛帖子可能很有用。你是否尝试重新启动所有内容?你是否为Java分配了特定数量的内存?您总是可以添加更多内容,看看它是否能够通过。一些XML结构可能非常消耗内存。你能在xml中看到任何可疑的东西吗?这篇论坛帖子可能很有用。你是否尝试重新启动所有内容?你是否为Java分配了特定数量的内存?你总是可以添加更多,看看它是否能通过。
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);