Java:需要对引用对象的API文档进行澄清
我了解了Java中引用对象的要点,以及软引用对象、弱引用对象和虚引用对象之间的基本区别 然而,我并不完全理解API文档中的以下几点Java:需要对引用对象的API文档进行澄清,java,reference,weak-references,finalization,Java,Reference,Weak References,Finalization,我了解了Java中引用对象的要点,以及软引用对象、弱引用对象和虚引用对象之间的基本区别 然而,我并不完全理解API文档中的以下几点 从API文档中获取: 弱引用对象,不阻止其引用对象成为可最终化的,最终化的,然后回收的 现在,bold中的术语在API文档中的任何地方都没有解释过,所以我想知道它们到底是什么意思,尤其是与或多或少被弃用的Object.finalize()method的finalization概念有关 从API文档中获取: public void clear():“此方法仅由Java
Object.finalize()
method的finalization概念有关public void clear()
:“此方法仅由Java代码调用;当垃圾收集器清除引用时,它直接执行,而不调用此方法。”
public boolean-enqueue()
:“此方法仅由Java代码调用;当垃圾收集器对引用进行排队时,它直接调用,而不调用此方法。”
同样,我不知道上面两个引号中的“Java代码”是什么意思:我无权访问的JVM内部代码?或者,我拥有只读/浏览访问权限的JDK代码?或者,最终用户自己的Java代码
“直接,不调用此方法”部分告诉我JVM不需要调用这些方法。另一方面,“仅通过Java代码”部分告诉我,它不是最终用户的Java代码,而是JVM的代码(如果它是指最终用户代码,那么我们会发现几乎每个Java类的每个方法的所有API文档中都有这个短语!)。那么哪种解释是正确的,谁能调用这个函数呢clear()
方法来执行此操作,但是如果您要将WeakReference
子类化并重写clear
方法,则在删除对象时,您将不会看到JVM调用该方法
enqueue
的引用基本上是在说同样的话。这是一个警告,您不能通过覆盖这些方法与GC的工作进行交互。- “可终结,终结,然后回收。”指垃圾回收
- “仅通过java代码”意味着从程序本身(包括JDK)调用—也就是说,您可能在某个地方有一些代码调用
ref.clear()代码>。它还解释了GC(即JVM)确实有效地清除了引用,但使用了一种不同的机制,该机制不调用
方法。例如,如果您将clear
覆盖为no op,则GC仍然能够“取消”引用clear