Scala在运行大型外部进程时会造成GC开销
我有一个外部程序,可以生成我需要的一些数据。通常,我将其输出重定向到一个文件,然后从Scala应用程序读取它,例如 app.exe>output.data 现在,我想整合这个过程,所以我做到了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已经创建
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过热:-)