定义:未终结对象与可终结对象

Alt*_*ica 3 java garbage-collection specifications finalization

为了理解 Java 中的弱引用,我不得不查阅 Java 语言规范。以下部分来自第 12.6 节,让我感到困惑:

一个未终结的对象从来没有自动调用它的终结器;已完成的对象已自动调用其终结器。可终结对象从未自动调用其终结器,但 Java 虚拟机可能最终会自动调用其终结器。

那么 unfinalized 和 finalizable 对象之间的正式区别是什么?从引用看来,如果 unfinalized 和 finalizable 是不同的,那么对于一个 unfinalized 对象来说,JVM 最终可能会调用它的终结器是正确的。有点混乱,或者我还有一些英语语义要研究;)

链接到 Java 规范中的部分:Implementing Finalization

Yis*_*hai 5

答案似乎就在这一行:

如果 Java 虚拟机检测到一个未终结的对象变成了终结器可达或不可达,它可能会标记该对象终结(G,H);

未完成的对象尚不符合完成条件。他们是可及的。可终结对象有资格被终结,因此 JVM 可能会在它选择时这样做。换句话说,“可能”的意思是“有许可”,而不仅仅是“它可能发生”的意思。