当前位置: 首页 > 面试题库 >

为什么自Java 9 PhantomReference java doc声明它专用于POST验尸清理操作,尽管之前它是PRE验尸

石臻
2023-03-14
问题内容

PhantomReference Java
8
及以下版本的Java文档看起来像这样:

虚拟引用对象,在收集器确定其引用对象可以通过其他方式回收之后,将其排队。与Java终结机制相比,虚拟引用最常用于以更灵活的方式安排 事前清理操作
。如果垃圾收集器在某个时间点确定幻像引用的参考对象是幻像可到达的,则在那时或以后的某个时间,它将使该引用入队。

为了确保保留可回收对象,可能无法检索幻像引用的引用对象:幻像引用的get方法始终返回null。

与软引用和弱引用不同,幻象引用在排队时不会被垃圾收集器自动清除。通过幻像引用可访问的对象将保留,直到清除所有此类引用或它们自身无法访问为止

PhantomReference Java
9及更高版本的Java文档如下所示:

虚拟引用对象,在收集器确定其引用对象可以通过其他方式回收之后,将其排队。幻影引用最常用于安排 事后清理操作
。假设垃圾收集器在某个时间点确定对象是幻影可到达的。到那时,它将自动清除对该对象的所有幻像引用以及对从该对象可到达的任何其他幻影可到达对象的所有幻像引用。在同一时间或以后,它将使那些新近清除的幻象引用排队,这些幻象引用已注册到参考队列中。

为了确保保留可回收对象,可能无法检索幻像引用的引用对象:幻像引用的get方法始终返回null。

Java 9 中的 PhantomReference 行为是否有所改变?还是只是Java创始人重新考虑了此类的奉献精神?


问题答案:

从Java
9开始,PhantomReference(PR)被自动清除。您会看到Javadoc更改是该更改的结果。

在Java
9之前,即使PR引用的对象get()将返回,也保持活动状态null。因此,在PR本身失效之前,尽管您无法获得对PR的引用,但该PR仍在技术上还活着。这种行为的好处不是很清楚。无论如何,公关处理将是“事前清理”。

在Java 9之后,就在入队前清除了PR(就像其他类型的弱引用/软引用一样),在PR被应用程序代码处理之前,引用对象本身就完全死了,这将是“事后清除”。



 类似资料:
  • 它适用于我声明的结构xy。为什么相同的模式不适用于复杂的 错误消息: 我最好的猜测是这与

  • 我搜索过,似乎这被称为列表理解,但它是如何工作的?

  • 本文向大家介绍什么是React.forwardRef?它有什么作用?相关面试题,主要包含被问及什么是React.forwardRef?它有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 React.forwardRef 会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。这种技术并不常见,但在以下两种场景中特别有用: 转发 refs 到 DOM 组件

  • 本文向大家介绍什么是zoom?它有什么作用?相关面试题,主要包含被问及什么是zoom?它有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 zoom是缩放比例,可以将元素进行缩放。 和css3中的transform:scale() 作用类似. 两者区别在于缩放的参照点不一样,zoom针对元素左上角,scale针对元素正中心

  • 问题内容: 精油 这到底是什么! 编辑:如果可以的话,请您写一两行并说明其工作原理? 问题答案: 试试这个简单的程序,命名为 并尝试执行 注意什么是argv。

  • 我正在尝试创建一个时钟,它通过使用每秒都会更改的动态UI标签来监视程序的运行时。我尝试过使用下面的代码,但一直得到一个空指针异常。这个异常源于JavaFX应用程序线程上的“clock”标签,尽管它在controller类中声明过,但它似乎是空的。我还实现了这个平台。稍后运行以确保标签更新将在JavaFX线程上运行,因为标签是在该线程上声明的,但是,它仍然会引发此异常。关于为什么会发生这种情况,有什