Java SoftReference

Java SoftReferenceSoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memorysensitive的程序中将某些大型数据设置成SoftReference再合适不过了。创建一个SoftReference:[code="java"]Objectobj=newObject();SoftReferencesoftRef=…

SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。

创建一个SoftReference:

Object obj = new Object();
SoftReference softRef = new SoftReference(obj);
obj = null;

最后那句“obj = null”很重要。如果不将obj设置成null,那么new出来的Object就会有一个”strong reference”,如果这样,softRef就不能发挥作用了。

使用SoftReferene:

Object obj2;
obj2 = sr.get();
if (obj2 == null) // GC freed this
sr = new SoftReference(obj2 = new Object());

因为是SoftReference,所以有可能已经被GC回收了,所以需要判断sr.get()的返回值是否为null。如果是的话,就再重新new一个Object。这里的最后一行代码也很有讲究,比如,也许会这么写:

Object obj2;
obj2 = sr.get();
if (obj2 == null) {
sr = new SoftReference(new Object());
obj2 = sr.get();
}

这样的问题就在于GC可能发生在”sr = new SoftReference(new Object());”和”obj2 = sr.get()”之间,那么obj2仍然有可能为null。

文章出处 http://blog.csdn.net/historyasamirror/article/details/6076505今天的文章Java SoftReference分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12051.html

(0)
编程小号编程小号

相关推荐

发表回复

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