为了理解 Java 中的弱引用,我不得不查阅 Java 语言规范。以下部分来自第 12.6 节,令我感到困惑:
An unfinalized object has never had its finalizer automatically invoked; a finalized object has had its finalizer automatically invoked. A finalizable object has never had its finalizer automatically invoked, but the Java virtual machine may eventually automatically invoke its finalizer.
那么未终结对象和可终结对象之间的形式区别是什么?从引述看来,如果未终结和可终结是不同的,那么对于未终结的对象,JVM 最终可能会调用其终结器的情况肯定不是真的。有点困惑,或者我还有一些英语语义需要研究;)
链接到 Java 规范中的部分:Implementing Finalization
最佳答案
答案似乎就在这一行:
If the Java virtual machine detects that an unfinalized object has become finalizer-reachable or unreachable, it may label the object finalizable (G, H);
未终结的对象还没有资格被终结。他们是可达的。可终结对象有资格被终结,所以 JVM 可以在它选择时这样做。换句话说,“可能”的意思是“允许”,而不仅仅是“它可能发生”的意思。
关于java - 定义 : Unfinalized versus finalizable object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360742/