为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中,SoftReference和WeakReference有什么区别?

在Java中,SoftReference和WeakReference有什么区别?

慕斯709654 2019-07-22 10:26:59
在Java中,SoftReference和WeakReference有什么区别?有什么区别java.lang.ref.WeakReference和java.lang.ref.SoftReference ?
查看完整描述

4 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

弱引用

弱参考简单地说,是一个不足以强迫对象留在内存中的引用。弱引用允许您利用垃圾收集器为您确定可达性的能力,因此您不必自己动手。创建这样的弱引用:

WeakReference weakWidget = new WeakReference(widget);

然后在你可以使用的代码的其他地方weakWidget.get()得到实际的Widget对象。当然,弱引用不足以防止垃圾收集,因此您可能会发现(如果没有对小部件的强引用)weakWidget.get()突然又回来了null.

...

软引用

软参考与弱引用完全一样,只是它不那么急于丢弃它所指的对象。一个只有弱可达性的对象(对它的最强引用是WeakReferences)将在下一个垃圾收集周期被丢弃,但是一个可以轻柔访问的对象通常会停留一段时间。

SoftReferences不是所需行为与WeakReferences但是在实践中,只要内存充足,软可达对象通常就会被保留。这使它们成为缓存的良好基础,例如上面描述的图像缓存,因为您可以让垃圾收集器同时考虑对象的可达性(强可达对象)。绝不可能(从缓存中删除),以及它多么需要它们正在消耗的内存。

彼得·凯斯勒在评论中补充道:

SunJRE确实将SoftReferences与WeakReferences区别对待。如果对可用内存没有压力,我们将尝试保留由SoftReference引用的对象。一个细节:“-Client”和“-server”JRE的策略是不同的:-Client JRE试图通过清除SoftReferences而不是扩展堆来保持您的占用空间很小,而-server JRE则试图通过扩展堆(如果可能的话)而不是清除SoftReferences来保持高性能。一个尺码并不适合所有的尺寸。


查看完整回答
反对 回复 2019-07-22
  • 4 回答
  • 0 关注
  • 736 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信