Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OutOfMemoryException:使用简单groovy读取11GB XML时出现内存错误,但使用普通JAVA读取时没有错误_Java_Xml_Groovy - Fatal编程技术网

OutOfMemoryException:使用简单groovy读取11GB XML时出现内存错误,但使用普通JAVA读取时没有错误

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{

我正在使用下面的简单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{ 公共静态无效字符串[]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}