Scala在运行大型外部进程时会造成GC开销

Scala在运行大型外部进程时会造成GC开销,scala,garbage-collection,Scala,Garbage Collection,我有一个外部程序,可以生成我需要的一些数据。通常,我将其输出重定向到一个文件,然后从Scala应用程序读取它,例如 app.exe>output.data 现在,我想整合这个过程,所以我做到了 val stream = "app.exe" lineStream stream foreach { line => doWork(_) } 不幸的是,我在一段时间后得到了GC开销异常。此app.exe可能会生成非常大的输出文件,例如超过100MB。因此,我认为在流式处理过程中,Scala已经创建

我有一个外部程序,可以生成我需要的一些数据。通常,我将其输出重定向到一个文件,然后从Scala应用程序读取它,例如

app.exe>output.data

现在,我想整合这个过程,所以我做到了

val stream = "app.exe" lineStream
stream foreach { line => doWork(_) }
不幸的是,我在一段时间后得到了GC开销异常。此
app.exe
可能会生成非常大的输出文件,例如超过100MB。因此,我认为在流式处理过程中,Scala已经创建/销毁了数千次
字符串实例,并造成了开销


我知道我可以调整JVM变量以增加GC开销限制。但我正在寻找一种不需要创建大量小
实例的方法

问题可能是由于记忆,这是以这种方式在流上进行访问的副作用。实际上,您正在内存中生成整个文件

在这里可以看到很多关于如何避免这种情况的信息:


具体来说,你违反了规则1。尝试将流定义为
def
,而不是
val

问题可能是由于记忆,这是以这种方式访问流的副作用。实际上,您正在内存中生成整个文件

在这里可以看到很多关于如何避免这种情况的信息:


具体来说,你违反了规则1。尝试将流定义为
def
,而不是
val

问题可能是由于记忆,这是以这种方式访问流的副作用。实际上,您正在内存中生成整个文件

在这里可以看到很多关于如何避免这种情况的信息:


具体来说,你违反了规则1。尝试将流定义为
def
,而不是
val

问题可能是由于记忆,这是以这种方式访问流的副作用。实际上,您正在内存中生成整个文件

在这里可以看到很多关于如何避免这种情况的信息:


具体来说,你违反了规则1。尝试将流定义为
def
,不是
val

什么是
GC过热
?我想你的意思。我更喜欢GC过热:-)什么是
GC过热
?我想你的意思。我更喜欢GC过热:-)什么是
GC过热
?我想你的意思。我更喜欢GC过热:-)什么是
GC过热我想你是说。我更喜欢GC过热:-)