note-49 SoftReference

本文深入探讨了软引用(SoftReference)在内存管理敏感程序中的作用及其实现方式。通过实例展示了如何在Java中创建并使用SoftReference来管理大型数据,确保在内存不足时能有效地释放资源,同时提供了对SoftReference使用注意事项的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from:

http://www.eoeandroid.com/archiver/tid-201077.html

 

 

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

创建一个SoftReference:
Java代码  收藏代码

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

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



使用SoftReferene:
Java代码  收藏代码

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

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

    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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值