为啥至少要两次标记才能回收。感觉这里矛盾。
来源:7-5 Java垃圾回收之常见面试题

厥~~~
2019-10-18
覆盖了finalize()的对象并且没有执行finalize()方法的才会被放入F-Queue中并进行第二次标记,至于那些没有覆盖finalize()方法或者已经执行完这个方法还是需要被回收的只标记一次就可以回收了。
虽然书上说的:要宣布一个对象死亡至少要经历两次标记过程。
但是有时候第一次标记后就可以直接GC回收了啊。第二次标记完全不需要。
写回答
1回答
-
翔仔
2019-10-18
同学好,我理解应该是语言设计者给对象一次复活的机会,类似加入了一个勾子,这个勾子就是finalize() 在里面可能会让对象"复活",给业务多一次选择机会,虽然我没遇到过这种需求,但是不保证其他的没这样的一些奇怪的需求,所以既然开了口子了,就得给一个二次标记的机会来回收对象,防止内存溢出
042019-10-19
相似问题