Dav*_*vid 3 garbage-collection scala
这个问题是关于Scala对象的,它们的定义如下:
object Pipeline {
val dispatcher = new Dispatcher
}
Run Code Online (Sandbox Code Playgroud)
我知道,在某些情况下,它们被称为"伴侣"对象,尽管我还不了解这种区别.无论如何,我想知道什么时候收集垃圾.所以,在上面的例子中,我想知道什么时候被占用的内存被dispatcher
回收,如果有的话.
Geo*_*edy 10
当编译成jave字节码时,伴随对象被懒惰地初始化为静态成员.对于大多数Java实现,这意味着当加载对象的类加载器符合收集条件时,它们将有资格进行收集.尽管如此,它确实非常依赖于实现.
对象Pipeline总是"可达",调度程序也是如此(类似于Java中的静态字段),所以我的猜测是它不是垃圾收集的.如果你想控制调度员的生命周期,你可以做类似的事情
object Pipeline {
var dispatcher = Some(new Dispatcher)
def close() { dispatcher = None }
}
Run Code Online (Sandbox Code Playgroud)