Java中的SoftReference和WeakReference有什么区别?

Java中的SoftReference和WeakReference有什么区别?,第1张

Java中的SoftReference和WeakReference有什么区别?

从Ethan Nicholas的《理解弱引用》中:

参考不足

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

WeakReference weakWidget = new WeakReference(widget);

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

软参考

甲软参考酷似弱引用,不同之处在于它是更少急于扔掉其所引用的对象。只有弱可达性的对象(对其最强的引用是

WeakReferences
)将在下一个垃圾回收周期中被丢弃,但是柔弱可达性的对象通常会停留一段时间。

SoftReferences
并不需要向任何行为不同于
WeakReferences
,但在实践中轻轻地可达对象一般保留,只要内存供应充足。这使它们成为缓存(例如上述图像缓存)的良好基础,因为您可以让垃圾收集器担心对象的可访问性(一个高度可访问的对象将永远不会从缓存中删除)。需要他们正在消耗的内存。

彼得·凯斯勒

(Peter Kessler)
在评论中添加:

Sun JRE确实将

SoftReference
WeakReferences
区别对待。如果可用内存没有压力,我们尝试保留由SoftReference引用的对象。一个细节:“-client”和“ -server” JRE的策略不同:-client JRE倾向于通过清除SoftReferences而不是扩展堆来减小占用的空间,而-server JRE尝试保持您的占用空间。通过扩大堆(如果可能)而不是清除SoftReferences,可以提高性能。一种尺寸并不适合所有尺寸。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4975617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存