4 回答
TA贡献2039条经验 获得超7个赞
弱引用
A 弱参考简单地说,是一个不足以强迫对象留在内存中的引用。弱引用允许您利用垃圾收集器为您确定可达性的能力,因此您不必自己动手。创建这样的弱引用:
WeakReference weakWidget = new WeakReference(widget);然后在你可以使用的代码的其他地方
weakWidget.get()
得到实际的Widget
对象。当然,弱引用不足以防止垃圾收集,因此您可能会发现(如果没有对小部件的强引用)weakWidget.get()
突然又回来了null
....
软引用
A 软参考与弱引用完全一样,只是它不那么急于丢弃它所指的对象。一个只有弱可达性的对象(对它的最强引用是
WeakReferences
)将在下一个垃圾收集周期被丢弃,但是一个可以轻柔访问的对象通常会停留一段时间。
SoftReferences
不是所需行为与WeakReferences
但是在实践中,只要内存充足,软可达对象通常就会被保留。这使它们成为缓存的良好基础,例如上面描述的图像缓存,因为您可以让垃圾收集器同时考虑对象的可达性(强可达对象)。绝不可能(从缓存中删除),以及它多么需要它们正在消耗的内存。
彼得·凯斯勒在评论中补充道:
SunJRE确实将SoftReferences与WeakReferences区别对待。如果对可用内存没有压力,我们将尝试保留由SoftReference引用的对象。一个细节:“-Client”和“-server”JRE的策略是不同的:-Client JRE试图通过清除SoftReferences而不是扩展堆来保持您的占用空间很小,而-server JRE则试图通过扩展堆(如果可能的话)而不是清除SoftReferences来保持高性能。一个尺码并不适合所有的尺寸。
添加回答
举报