有人可以解释Strong,Soft,Weak和Phantom引用之间的区别以及它的用法吗?

时间:2010-01-06 12:13:30

标签: java reference

我一直试图理解不同参考文献之间的区别,但理论并没有激发任何想法让我想象出来。

有人可以简要解释一下不同的参考资料吗?

每个例子都会做得更好。

3 个答案:

答案 0 :(得分:21)

关于这个主题的另一篇好文章:
Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError,有漂亮的图表

http://www.kdgregory.com/images/java.refobj/object_life_cycle_with_refobj.gif

提取物:

  

正如您可能猜到的,在对象生命周期图中添加三个新的可选状态会造成混乱   虽然文档表明从强可达到软,弱和幻像到回收的逻辑进展,但实际的进展取决于程序创建的参考对象。
  如果您创建WeakReference但不创建SoftReference,则对象会直接从强可达到非弱可达到最终到收集。对象生命周期,带参考对象

同样重要的是要记住并非所有对象都附加到参考对象上 - 实际上,很少有对象
引用对象是一个间接层:您通过引用对象到达引用的对象,显然您不希望在整个代码中使用该间接层。
事实上,大多数程序将使用引用对象来访问程序创建的相对少量的对象。

参考文献和参照物

引用对象在程序代码和其他对象(称为引用对象)之间提供了一个间接层 每个引用对象都围绕其引用对象构造,并提供get()方法来访问引用对象。创建引用后,您无法更改其引用。收集了引用后,get()方法返回null。应用程序代码,软/弱引用和引用

之间的关系

alt text


更多例子:Java Programming: References' Package

alt text http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png

  
      
  • 案例1:这是常规情况,据说对象可以很容易到达。

  •   
  • 案例2:对象有两条路径,因此选择最强的路径,即具有强引用的路径,因此对象可以很容易到达。

  •   
  • 案例3:再次有两条到Object的路径,最强的一条是Weak Reference(因为另一条是Phantom Reference),因此该对象被称为弱可达。

  •   
  • 案例4:只有一条路径,最弱的链接是弱引用,因此对象很难到达。

  •   
  • 案例5:只有一条路径和最薄弱的链接是幻像参考,因此该对象是幻象可达的。

  •   
  • 案例6:现在有两条路径,最强的路径是带有软引用的路径,因此现在可以轻松地访问该对象。

  •   

答案 1 :(得分:7)

解释这些类型的参考文献(包括示例)的文章:http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html

答案 2 :(得分:3)

有一个非常简单的规则:

  • 强引用对象是Object a = new Object()之类的标准代码。只要引用(上面的a)是“可到达的”,引用的对象就不是垃圾。因此任何没有可达的强引用的东西都可以被视为垃圾

那么我们来看看非强引用类型:

    一旦有资格获得GC(并且WeakReference已清除),
  • 弱引用的对象可能会被JVM收集。对a的弱引用看起来像new WeakReference<Object>(a)。如果您想要一个缓存,那么弱引用非常有用,只有当密钥存在于其他地方时可以很容易访问时才需要数据(例如HttpSessions)
  • 软引用对象可能会在JVM中闲逛,直到它绝对需要恢复内存。软引用对于值很长但可以在必要时收集的缓存很有用

我对幻影一直不太确定!