我一直试图理解不同参考文献之间的区别,但理论并没有激发任何想法让我想象出来。
有人可以简要解释一下不同的参考资料吗?
每个例子都会做得更好。
答案 0 :(得分:21)
关于这个主题的另一篇好文章:
Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError,有漂亮的图表
提取物:
正如您可能猜到的,在对象生命周期图中添加三个新的可选状态会造成混乱 虽然文档表明从强可达到软,弱和幻像到回收的逻辑进展,但实际的进展取决于程序创建的参考对象。
如果您创建WeakReference
但不创建SoftReference
,则对象会直接从强可达到非弱可达到最终到收集。对象生命周期,带参考对象
同样重要的是要记住并非所有对象都附加到参考对象上 - 实际上,很少有对象。
引用对象是一个间接层:您通过引用对象到达引用的对象,显然您不希望在整个代码中使用该间接层。
事实上,大多数程序将使用引用对象来访问程序创建的相对少量的对象。
参考文献和参照物
引用对象在程序代码和其他对象(称为引用对象)之间提供了一个间接层 每个引用对象都围绕其引用对象构造,并提供get()方法来访问引用对象。创建引用后,您无法更改其引用。收集了引用后,get()方法返回null。应用程序代码,软/弱引用和引用
之间的关系
更多例子: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
)是“可到达的”,引用的对象就不是垃圾。因此任何没有可达的强引用的东西都可以被视为垃圾。那么我们来看看非强引用类型:
WeakReference
已清除),a
的弱引用看起来像new WeakReference<Object>(a)
。如果您想要一个缓存,那么弱引用非常有用,只有当密钥存在于其他地方时可以很容易访问时才需要数据(例如HttpSessions)我对幻影一直不太确定!