這個問題是關於Scala的對象,其定義是這樣的:Scala對象何時收集垃圾?
object Pipeline {
val dispatcher = new Dispatcher
}
我知道,在某些情況下,它們被稱爲「同伴」的對象引用,儘管我還不瞭解的區別。無論如何,我想知道他們什麼時候收集垃圾。所以,在上面的例子中,我想知道dispatcher
佔用的內存何時被回收。
這個問題是關於Scala的對象,其定義是這樣的:Scala對象何時收集垃圾?
object Pipeline {
val dispatcher = new Dispatcher
}
我知道,在某些情況下,它們被稱爲「同伴」的對象引用,儘管我還不瞭解的區別。無論如何,我想知道他們什麼時候收集垃圾。所以,在上面的例子中,我想知道dispatcher
佔用的內存何時被回收。
當編譯爲jave字節碼時,伴隨對象是懶惰地初始化靜態成員。對於大多數Java實現來說,這意味着當加載對象的類加載器有資格收集時,它們將有資格收集。這真的很依賴於實現。
......在很多情況下意味着:從來沒有 – 2010-10-18 05:21:43
對象Pipeline總是「可達」的,調度器也是如此(類似於Java中的靜態字段),所以我猜測它不是垃圾收集。如果你想控制調度員的生命週期,你可以不喜歡
object Pipeline {
var dispatcher = Some(new Dispatcher)
def close() { dispatcher = None }
}
的東西作爲其他用戶建議,該對象符合時纔可以收集它的類加載器的集合。除非你有自定義的類加載方案,這意味着dispatcher
不會被收集,並且它所需要的內存永遠不會被釋放(假設對象初始化了)。
除了手動重置dispatcher
字段以使對應的Dispatcher
對象符合收集條件外,您始終可以通過使用SoftReference
自動執行此過程。
'伴侶對象'是一個對象,它與同一個源文件中的某個類具有相同的名稱,例如'class Foo'和'object Foo'。 – 2010-10-18 05:30:31