软引用SoftReference的使用

分类: 转载文章 0人评论 1年前发布

SoftReference的主要特点就是在当内存不够的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的项目中将某些数据设置成SoftReference可以避免内存的溢出。

创建一个SoftReference
SoftReference<Map<String, String>> softReference = new SoftReference<Map<String, String>>(new HashMap<String, String>());

需要注意放入SoftReference的对象最好不要在其它地方有引用,否则就有可能产生"strong reference",如果这样,SoftReference就不起作用了。

使用SoftReferene
Map<String, String> map = softReference.get();
if (map == null) {
    softReference = new SoftReference<Map<String, String>>(
        map = new HashMap<String, String>());
}

因为是SoftReference,有可能已经被GC回收了,所以需要判断softReference.get()的返回值是否为null。如果是的话,就再重新new一个。注意这里的map赋值代码,如果写成这样:

Map<String, String> map = softReference.get();
if (map == null) {
    softReference = new SoftReference<Map<String, String>>(
        new HashMap<String, String>());
}
map = softReference.get();

GC有可能发生在softReference = new SoftReference<Map<String, String>>(new HashMap<String, String>())和map = softReference.get();之间,那么map仍然有可能为null,虽然这种几率小到几乎不存在。

上一篇:
下一篇:

你可能感兴趣的文章

0 条评论