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

我了解了Java中引用对象的要点,以及软引用对象、弱引用对象和虚引用对象之间的基本区别

然而,我并不完全理解API文档中的以下几点

  • 从API文档中获取:

    弱引用对象,不阻止其引用对象成为可最终化的最终化的,然后回收的

    现在,bold中的术语在API文档中的任何地方都没有解释过,所以我想知道它们到底是什么意思,尤其是与或多或少被弃用的
    Object.finalize()
    method的finalization概念有关

  • 从API文档中获取:

    public void clear()
    :“此方法仅由Java代码调用;当垃圾收集器清除引用时,它直接执行,而不调用此方法。”

    public boolean-enqueue()
    :“此方法仅由Java代码调用;当垃圾收集器对引用进行排队时,它直接调用,而不调用此方法。”

    同样,我不知道上面两个引号中的“Java代码”是什么意思:我无权访问的JVM内部代码?或者,我拥有只读/浏览访问权限的JDK代码?或者,最终用户自己的Java代码

    “直接,不调用此方法”部分告诉我JVM不需要调用这些方法。另一方面,“仅通过Java代码”部分告诉我,它不是最终用户的Java代码,而是JVM的代码(如果它是指最终用户代码,那么我们会发现几乎每个Java类的每个方法的所有API文档中都有这个短语!)。那么哪种解释是正确的,谁能调用这个函数呢

  • 弱引用对象,不阻止其引用对象成为可最终化的最终化的,然后回收的

    这些都是垃圾收集过程中的阶段。对象首先被标记为finalizable,表示没有对它们的强引用。然后调用finalize(),并将它们标记为finalize,最后回收内存

    public void clear():“此方法仅由Java代码调用;当垃圾收集器清除引用时,它将直接执行此操作,而不调用此方法。”

    这意味着,当您作为程序员决定清除引用时,将使用
    clear()
    方法来执行此操作,但是如果您要将
    WeakReference
    子类化并重写
    clear
    方法,则在删除对象时,您将不会看到JVM调用该方法

    enqueue
    的引用基本上是在说同样的话。这是一个警告,您不能通过覆盖这些方法与GC的工作进行交互。

    • “可终结,终结,然后回收。”指垃圾回收
    • “仅通过java代码”意味着从程序本身(包括JDK)调用—也就是说,您可能在某个地方有一些代码调用
      ref.clear()。它还解释了GC(即JVM)确实有效地清除了引用,但使用了一种不同的机制,该机制不调用
      clear
      方法。例如,如果您将
      clear
      覆盖为no op,则GC仍然能够“取消”引用

    谢谢,但我喜欢蒂姆关于“可定稿、定稿、回收”的回答。显然,这是有区别的,否则文档不会选择如此冗长+1用于“java代码”澄清。