Java:需要对引用对象的 API 文档进行说明

标签 java reference weak-references finalize finalization

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

但是,我没有完全理解 API 文档中的以下几点

  1. 来自 WeakReference<T> 的 API 文档:

    “弱引用对象,不会阻止其引用对象被finalizablefinalized,然后回收。”

    现在,bold 中的术语在 API 文档中没有任何解释,所以我想知道它们的确切含义,尤其是与或多或少已弃用的 Object.finalize 有关的内容() 方法的终结概念。

  2. 来自 Reference<T> 的 API 文档:

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

    public boolean enqueue():“此方法仅由 Java 代码调用;当垃圾收集器将引用入队时,它会直接执行,无需调用此方法。”

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

    "directly, without invoking this method"部分告诉我JVM不需要调用这些方法。另一方面,“仅由 Java 代码” 部分告诉我,它不是最终用户的 Java 代码,而是 JVM 的代码(如果它指的是最终用户代码,那么我们将在几乎每个 Java 类的每个方法的所有 API 文档中都发现了这个短语!)。那么哪种解释是正确的,谁可以调用这个函数呢?

最佳答案

"Weak reference objects, which do not prevent their referents from being made finalizable, finalized, and then reclaimed."

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

public void clear(): "This method is invoked only by Java code; when the garbage collector clears references it does so directly, without invoking this method."

这就是说,当您作为程序员决定清除引用时,clear() 方法用于执行此操作,但是如果您要子类化 WeakReference并覆盖 clear 方法,当对象被移除时,您将看不到 JVM 调用该方法。

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

关于Java:需要对引用对象的 API 文档进行说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899990/

相关文章:

java - 从包含整数的字符串中解析输入

c# - 如何从 Visual C# 2013 中的另一个(引用)项目访问表单组件?

objective-c - 在 Objective-C(和 Swift)中弱属性是线程安全的吗?

Java WeakHashMap 类

android - 将 Activity 实例保存在 WeakReference 中是一种好习惯吗

Java 内存不足。这不是内存泄漏吗?

java - 如何使用代码模型库生成循环和条件

java - 如何从 Windows 服务调用批处理文件?

reference - 如何避免在 Rust 中为可变和不可变引用编写重复的访问器函数?

c++ - 避免返回本地引用(对返回的本地变量的引用 - 警告)