【问题标题】:What is phantom reference in java [closed]java中的幻像引用是什么[关闭]
【发布时间】:2012-10-01 11:56:58
【问题描述】:

Java 中有四种类型的引用:Strong、Soft、Weak 和 phantom。请详细说明 Java 究竟在何处以及如何使用幻像引用。

编辑:

我确实阅读了 javaDoc,如下面的 assylias 所示。该部分说,如果一个对象已经完成并且一些幻像引用引用它,则该对象是幻像可回收的。我不太明白这个说法。

phantom 有什么用,我们应该在什么情况下使用它?

【问题讨论】:

  • 欢迎来到 Stack Overflow!我们鼓励您research your questions。如果您有 tried something already,请将其添加到问题中 - 如果没有,请先研究并尝试您的问题,然后再回来。
  • @Raedwald,我不希望任何人为我做作业。我正在寻求一些帮助。我确实阅读了 javaDoc,如下面的 assylias 所示。该部分说,如果一个对象已被最终确定,则该对象是可幻像可调用的,并且某些幻像引用会引用它。我完全理解这种说法。我应该在我的描述中补充一点,而且我也可以使用 phantom ,为什么要使用它。这就是为什么我问我的问题在哪里使用它
  • @Tichodroma 是的,我确实阅读了 java 文档,我会注意,如果我问问题,我会添加我的研究背景,这样人们就不会认为我在问他们做我的功课
  • @MukulGoel.. 没问题.. 但是对于未来,在提问时,记得告诉你已经知道的,你已经做过的.. 这将阻止我们再次尝试同样的事情..

标签: java reference


【解决方案1】:

java.lang.ref package javadoc 中描述了每种参考的工作方式:

从最强到最弱,不同级别的可达性反映了一个对象的生命周期。它们在操作上的定义如下:

  • 如果某个对象可以被某个线程访问而无需遍历任何引用对象,则该对象是强可达的。新创建的对象可以被创建它的线程强访问。
  • 如果一个对象不是强可达但可以通过遍历软引用来达到,那么它就是软可达的。
  • 一个对象是弱可达的,如果它既不是强可达也不是软可达,但可以通过遍历弱引用来达到。当对弱可达对象的弱引用被清除时,该对象就有资格进行终结。
  • 如果一个对象既不是强、软或弱可到达的,它已被最终确定,并且某些幻象引用引用它,则它是幻象可到达的。
  • 最后,当一个对象无法通过上述任何一种方式访问​​时,它是无法访问的,因此有资格进行回收。

Stack Overflow 上有一些帖子举例说明了您可能需要 PhantomReference 的方式和时间:

【讨论】:

  • 谢谢,但我确实是从 javadoc 中读到的。了解强,软,弱。但力不从心。它到底是什么,我应该在哪里使用它。
  • @MukulGoel 好的,您最初的问题并不清楚。这篇文章回答了你的问题:stackoverflow.com/questions/9826741/… - 简短回答:它几乎没有实际用途,99.9% 的开发人员永远不会使用该功能。
  • 是的,原来的问题有点太笼统了。谢谢。该链接说明了我在寻找什么。
  • @MukulGoel 我用第二个链接编辑了我的帖子。
  • 幻影引用如何有意义呢?除了调试JVM之外,延迟收集对象直到幻像引用消失有什么用处?这不是增加OOM的可能性吗?此外,似乎无法判断特定对象是否已被实际收集。
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2011-12-30
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多