我正在尝试使用XMLUNIT比较两个大的XML文件,但是却收到“线程“ main”中的异常” java.lang.OutOfMemoryError:Java堆空间”
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 Run配置中添加了-Xms2048M -Xmx2048M作为参数。
答案 0 :(得分:1)
您是否尝试过使用SAX Parser? 它将解决您的问题,因为它不需要将整个文件加载到内存中进行处理。
请问您的文件大小是多少?
答案 1 :(得分:1)
我还没有使用xmlunit。但是,查看xmlunit文档,您似乎可以将流用作输入。
例如: BufferedInputStream in = new BufferedInputStream(new FileInputStream(pathname))
使用流不会立即将整个文件加载到内存中。
但是要获取OutOfMemoryError异常,文件应该非常大。您还可以在启动时增加应用程序的最大堆大小。
例如:将最小堆大小(xms)和最大堆大小(xmx)增加到2GB。
java -Xms2048mm -Xmx2048m