如何在Groovy中解析大文件而不超过堆大小?

如何在Groovy中解析大文件而不超过堆大小?,groovy,Groovy,解析一个大文件时,我发现以下错误被捕获:java.lang.OutOfMemoryError:java堆空间 如何在Groovy中解析大文件而不超过堆大小 使用大型文件失败的示例代码 import java.io.File def inputFile = new File("c:/dev/test.txt") inputFile.getText().eachLine{ it, i -> ... do something with each line

解析一个大文件时,我发现以下错误
被捕获:java.lang.OutOfMemoryError:java堆空间

如何在Groovy中解析大文件而不超过堆大小

使用大型文件失败的示例代码

import java.io.File

def inputFile = new File("c:/dev/test.txt")
    inputFile.getText().eachLine{ it, i ->
            ... do something with each line
        }

确保您在文件上迭代的方式不会将整个文件加载到内存中

  • 在本例中,专门将inputFile.getText().eachLine转换为inputFile.eachLine
  • 不要使用.readLines(),因为它会尝试将整个文件加载到内存中,因此应改用每个hline{..}
  • 您还可以使用jvm标志扩展堆大小,例如通过使用
    groovy-Xmx1024M myscript.groovy
    将堆大小扩展到1GB,另请参见
有关更多信息和进一步讨论,请参见groovy邮件列表中的这一部分

没有堆空间错误的代码

def inputFile = new File("c:/dev/test.txt")
inputFile.eachLine{ it, i ->
        ... do something with each line
    }

这没关系,只要不是一条大线。这可以归结为他/她打算如何处理这些数据。