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

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

有什么区别java.lang.ref.WeakReferencejava.lang.ref.SoftReference ?


慕斯709654
浏览 737回答 4
4回答

largeQ

弱引用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来保持高性能。一个尺码并不适合所有的尺寸。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java