Java的finalize
方法在JVM確定對象符合垃圾回收條件後調用。對於何時會發生這種情況,或者在程序退出之前是否會發生這種情況,並沒有真正的保證。我的問題是finalize
是否爲保證被調用的對象實際上是垃圾收集。我特別想到代代GC中最年輕一代的物體。終結者如何與代GC進行交互?
在世代GC中,最年輕的一代通常會使用簡單的標記清除收集進行GC'd處理,其中只有活動對象被遍歷並複製到新空間。因此,最年輕一代的垃圾實際上並沒有穿過。如果垃圾未遍歷,那麼我們如何保證finalize
被稱爲垃圾對象?看來,a)不能保證finalize
將被調用這些對象在最年輕一代變成垃圾,或者b)保證finalize
將被調用,但覆蓋finalize
的對象以某種方式處理不同。
看到這個答案:http://stackoverflow.com/questions/7880569/does-jvm-gc-call-finalize-on-程序線程退出 – wheaties