比较两个大 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
我正在尝试比较两个大 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