Java中的软参考和弱引用有什么区别?

问题:

有什么区别?xa0xa0xa0

回答:

来自Understanding Weak References,由Ethan Nicholas:

 弱引用
简单地说,weak reference是一个不够强大的引用,强制对象保留在内存中。弱引用允许您利用垃圾收集器为您确定可达性的能力,因此您不必自己做。你创建一个弱引用:
然后在代码的其他地方,您可以使用weakWidget.get()获取实际的Widget对象。当然,弱参考并不足以防止垃圾收集,所以你可能会发现(如果没有对widget的强烈引用)weakWidget.get()突然开始返回null

 软参考
A soft reference完全是一个弱引用,除了它不那么渴望丢弃它所引用的对象。一个只有很弱的对象(最强烈的引用是WeakReferences)将在下一个垃圾回收周期被丢弃,但是一个可以轻松访问的对象通常会粘在一段时间。
 SoftReferences不是required的行为与WeakReferences不同,但实际上只要内存充足,通常可以保留轻微可达的对象。这使得它们成为缓存的良好基础,例如上述的图像缓存,因为您可以让垃圾回收器担心对象的可达性(可以从缓存中删除强大的可访问对象never)以及如何非常需要他们正在消费的内存。

Peter Kessler则在评论中加入:

Sun JRE对SoftReferences的处理方式与WeakReferences不同。如果可用内存没有压力,我们尝试坚持使用SoftReference引用的对象。一个细节:“-client”和“-server”JRE的策略是不同的:-client JRE尝试通过更愿意清除SoftReferences而不是展开堆来保持足迹,而-server JRE试图保持你的性能高,倾向于扩展堆(如果可能)而不是清除SoftReferences。一个大小不适合所有。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between a soft reference and a weak reference in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

49 − = 47