比较两个大 xml 文件时出现内存不足错误

Getting Out of memory error while comparing two large xml files

我正在尝试比较两个大 XML 文件 uisng XMLUNIT,但我得到 "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"

public static void main(String[] args) throws Exception {
    FileReader file = new FileReader("C:/abc/a.xml");

    FileReader file1 = new FileReader("C:/abc/b.xml");
    assertXMLEquals(file, file1);
}


public static void assertXMLEquals(FileReader expectedXML, FileReader actualXML) throws Exception {

        DetailedDiff difference = null;
        try {
            // Checks each Node
            difference = new DetailedDiff(XMLUnit.compareXML(expectedXML, actualXML));
        } catch (Exception e) {

        }

        if (!difference.similar()) {
            List<Difference> AllDifferences = difference.getAllDifferences();
            System.out.println("Xml comparison failed because of follwoing error/s : \n"+AllDifferences);
        }
    }

解决方案 - 我在 Eclipse 运行 配置中添加了“-Xms2048M -Xmx2048M”作为参数。

您尝试过使用 SAX 解析器吗? 它会解决你的问题,因为它不需要将整个文件加载到内存中来处理它。

顺便问一下,您的文件有多大?

我没用过xmlunit。但是查看 xmlunit 文档,您似乎可以使用流作为输入。

例如: BufferedInputStream in = new BufferedInputStream(new FileInputStream(pathname))

使用流不会一次将整个文件加载到内存中。

但要获得 OutOfMemoryError 异常,文件应该非常大。您还可以在启动时增加应用程序的最大堆大小。

例如:将最小堆大小 (xms) 和最大堆大小 (xmx) 增加到 2GB。

java -Xms2048mm -Xmx2048m