打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SoftReference的用法

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

创建一个SoftReference:

Java代码
 
  1. Object obj = new Object();     
  2. SoftReference softRef = new SoftReference(obj);     
  3. obj = null;    

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

 

使用SoftReferene:

Java代码
 
  1. Object obj2;     
  2. obj2 = sr.get();     
  3. if (obj2 == null// GC freed this     
  4. sr = new SoftReference(obj2 = new Object());  

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

Java代码
 
  1. Object obj2;     
  2. obj2 = sr.get();     
  3. if (obj2 == null) {     
  4.     sr = new SoftReference(new Object());     
  5.     obj2 = sr.get();     
  6. }   

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Java中三个引用类SoftReference、WeakReference和PhantomReference的区别
Java常见的四种引用
Java 引用类型简述
Java 中的 Reference
对SoftReference、WeakReference和PhantomRefrence的...
详解JVM的内存管理机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服