Scala垃圾收集?

Scala垃圾收集?,scala,memory-management,garbage-collection,jvm,Scala,Memory Management,Garbage Collection,Jvm,我对Scala比较陌生 如果我有这样一个结构 sampleFile.map(line => line.map { var myObj = new MyClass(word); myObj.func(); }) 我创建了一个MyClass的对象,并在类方法(func())中执行一些操作。我对文件中的所有行重复此操作(通过map)。因此,我在迭代的每一步(每一行)创建一个对象。当我开始下一次迭代时,myObj的作用域将是无效的(它们是在块的末尾被销毁,还是在内存中被孤立?)。我的疑

我对Scala比较陌生

如果我有这样一个结构

sampleFile.map(line => line.map {
  var myObj = new MyClass(word); 
  myObj.func();
})

我创建了一个
MyClass
的对象,并在类方法(
func()
)中执行一些操作。我对文件中的所有行重复此操作(通过
map
)。因此,我在迭代的每一步(每一行)创建一个对象。当我开始下一次迭代时,
myObj
的作用域将是无效的(它们是在块的末尾被销毁,还是在内存中被孤立?)。我的疑问是垃圾收集何时触发?另外,在迭代的每一步创建一个对象是否都很昂贵?当线路数量增加到100万条时,这是否对性能有任何影响

垃圾收集是JVM的责任,而不是Scala的责任。因此,确切的细节取决于您正在运行的JVM。没有定义触发垃圾回收的时间;JVM会在适当或必要时尝试这样做


在GC算法和JVM调优方面比我更了解的人可能会给您一些具体的解释,以解决您的性能问题,但总的来说,我认为您应该相信JVM非常擅长“智能”地收集垃圾。在JVM上,任何未引用的对象都应该被垃圾收集,并且只要
myObj
超出范围,您对新对象的最后一次引用就会消失

短命对象的垃圾收集通常是非常便宜和高效的,因此您可能不应该担心它(至少在您有了证明不是这样的基准/测量性能问题之前……)


特别是,由于您似乎正在执行IO(从示例文件读取?),因此我希望GC的开销与磁盘IO操作的成本相比可以忽略不计。

不完全如此。还有一个语言方面的问题——Scala中的匿名函数由函数对象表示,它的分配方式(仅一次或每次迭代)可能会影响性能。