jvm_book icon indicating copy to clipboard operation
jvm_book copied to clipboard

3.2.4 生存还是死亡

Open arsiac opened this issue 5 years ago • 1 comments

书中提到“要真正宣告一个对象的死亡,至少要经历两次标记过程。”

这是第一次标记过程:“如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记” 。 不进入队列的判断条件:“假如对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,那么虚拟机将这两种情况都视为“没有必要执行”” 两种对象被分离:“如果这个对象被判定为确有必要执行finalize()方法,那么该对象将会被放置在一个名为F-Queue的队列之中” 这是第二次标记过程:“finalize()方法是对象逃脱死亡命运的最后一次机会,稍后收集器将对F-Queue中的对象进行第二次小规模的标记”。

根据上面的内容,那么如果一个对象没有覆盖finalize()方法,那它就不会进入F-Queue,为什么还会“至少要经历两次标记过程”呢?

(抱歉,我没看到勘误里已经有了)

arsiac avatar Oct 04 '20 08:10 arsiac

你的理解是正确的。勘误中是已经有了,依然感谢你的指正。

fenixsoft avatar Oct 04 '20 08:10 fenixsoft