再看SoftReference和WeakReference

java中的SoftReference和WeakReference已经出来很久了,但是到现在为止开发的程序里几乎都没有直接用到它们。

用不到,那就说明还没有碰到需要用它们的场景,当然也有一个原因,就是不知道怎么用。

 

简单来说,java中的引用默认都是强引用,只要当引用存在(就是能从根引用遍历到),GC就不会回收。

有时候,我们无法自己决定还要不要用一个实例,可能需要根据情况决定,那么就有了SoftReference和WeakReference。

SoftReference:当jvm内存不够用的时候,由jvm决定是否回收

WeakReference:无条件回收。

 

对于SoftReference,我们很自然的就想到了一个应用,那就是cache,cache里的东西当然是存在的时间越长越好,但是毕竟有内存的限制,既然我们不知道什么时候内存不够用,那么就把控制权交个jvm,jvm觉得内存不够用了,那么就去清理一下SoftReference里的对象

 

对于WeakReference,只能想到一个应用场景,那就是,类A里引用了类B里的一个field实例,目的就是为了当类B以及其成员没被GC是,想在类A的方法里对这个field进行操作,如果已经GC了,那么就什么都不做。

比如:一个异步请求返回数据时,去更新页面A里的表格,就可以在请求类里保持一个对页面A里表格的一个WeakReference,如果在请求还未返回的时候,页面A已经关掉了的话,也不影响表格的释放。页面A没关掉的话,就可以直接更新了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值