我正在阅读这篇文章,但是我并不完全理解最终化对象(覆盖
finalize
方法的对象)在可以被回收之前至少需要2个GC循环。
在最好的情况下,需要至少两个垃圾回收循环才能回收可终止对象。
还有人能详细解释一下最终化对象为什么可能需要多个GC周期进行回收吗?
我的逻辑论点是,当我们重写finalize方法时,运行时将不得不向垃圾收集器注册这个对象(以便GC可以调用此对象的finalize
方法),这使我认为GC将引用所有可终止对象。如果是这样,那么这个对象如何成为首先可以被GC回收的候选对象?我通过这个理论达到了矛盾。
PS:我知道覆盖finalize
不是推荐的方法,自Java 9以来,该方法已被弃用。
finalize
的对象需要多于1个GC周期。但我仍然不明白为什么它们需要至少两个周期。您能解释一下吗? - Lavish Kothari