我了解了 Java 中引用对象的要点,以及软引用对象、弱引用对象和幻像引用对象之间的基本区别。
但是,我不完全理解 API 文档中的以下几点
来自WeakReference<T>的 API 文档:
“弱引用对象,不会阻止它们的引用对象被最终化,最终化,然后被回收。”
现在, API 文档中的任何地方都没有解释粗体字的术语,所以我想知道它们的确切含义,特别是与或多或少不推荐使用
Object.finalize()
的方法的终结概念有关。来自Reference<T>的 API 文档:
public void clear()
:“此方法仅由 Java 代码调用;当垃圾收集器清除引用时,它会直接清除引用,而不调用此方法。”public boolean enqueue()
:“此方法仅由 Java 代码调用;当垃圾收集器将引用入队时,它直接这样做,而不调用此方法。”同样,我不知道上面 2 句引号中的“Java 代码”是什么意思:我无权访问的 JVM 内部代码?或者,我具有只读/浏览访问权限的 JDK 代码?或者,最终用户自己的 Java 代码?
“直接,不调用这个方法”部分告诉我JVM不需要调用这些方法。另一方面,“仅由 Java 代码”部分告诉我,它不是最终用户的 Java 代码,而是 JVM 的(如果它意味着最终用户代码,那么我们会发现这个短语在所有几乎每个 Java 类的每个方法的 API 文档!)。那么哪种解释是正确的,谁能调用这个函数呢?