OutOfMemoryException:使用简单groovy读取11GB XML时出现内存错误,但使用普通JAVA读取时没有错误
我正在使用下面的简单groovy脚本重新定义一个11GB大小的大型XML。 1.Groovy—这会导致memmory错误。 2.Java-无内存不足错误 这两个代码都在InteliJ Idea社区版上使用默认VM内存执行 Groovy代码OutOfMemoryException:使用简单groovy读取11GB XML时出现内存错误,但使用普通JAVA读取时没有错误,java,xml,groovy,Java,Xml,Groovy,我正在使用下面的简单groovy脚本重新定义一个11GB大小的大型XML。 1.Groovy—这会导致memmory错误。 2.Java-无内存不足错误 这两个代码都在InteliJ Idea社区版上使用默认VM内存执行 Groovy代码 def is = new File("TOPOLOGY.xml").newInputStream() is.eachLine { line -> println(line.size()) } JAVA代码 公共类ReadXMLJavaLocal{
def is = new File("TOPOLOGY.xml").newInputStream()
is.eachLine { line ->
println(line.size())
}
JAVA代码
公共类ReadXMLJavaLocal{
公共静态无效字符串[]args{
尝试Scanner Scanner=new Scanner新建文件拓扑.xml{
而scanner.hasNext{
System.out.printlnscanner.nextLine.length;
}
}捕捉异常{
e、 打印跟踪;
}
}
}
希望您能理解groovy代码的错误,因为它会导致内存异常。看起来groovy代码正在为文件和输入流定义一个变量,而Java只是为scanner对象定义一个变量
Groovy代码中的is变量必须存储11GB文件的所有数据。Java只是在扫描文件时一次打印一行。因此,更好的比较方法是在Groovy中使用相同的Java代码,稍微简化一点,然后看看它是如何工作的。如果您想更接近Java add@CompileStatic,在groovy中使用scanner之后,输出是类似的,我的观察是,如果XML打印得不好,scanner会有更好的结果。您确定这就是所有groovy代码吗?我看不出这会在哪里消耗和保留内存。。。顺便说一句,您的groovy示例可以写成:new FileTOPOLOGY.xml.eachLine{println it.length}