Android 笔记 JAVA 的 WeakReference

WeakReference

在计算机编程的时候,一个特别需要注意的事情就是关于内存使用的。如果程序不注意内存使用状况,很可能会造成内存泄漏,时间越长内存占用越多,造成性能下降。

C和C++语言需要程序员手动清空不需要使用的对象,所以编程较复杂。
JAVA语言的一个好处就是,虚拟机可以自动清理对象,也就是说

Camera camera = new Camera();
camera = null;

只要第二行中设定为null,那虚拟机就会在合适的时候清空这个camera对象所占空间。对于没有使用的简单引用,即便是不设定null,虚拟机也会在合适的时候清空这个对象,只要发现这个对象没有在使用了。

有些时候,虚拟机也不会回收空间,因为这个对象是在某些时候需要的(比如使用cache的时候,这一点我不太明白,但是可以想象的到)。

如果一个对象被WeakReference指向,并且没有其他引用指向的时候,系统会在合适的时候回收空间。

WeakReference<Camera> weakCamera = new WeakReference(Camera)(camera);

通过这个我们创建了一个Weak的Camera对象,我们不需要对这个对象进行任何回收相关的操作,系统就会在合适的时候回收空间了

为此,我们不再需要直接从Camera获得引用(因为这样会获得强引用,那还要W额啊看Reference干什么?),而是通过这个weakCamera获得camera对象

if(weakCamera.get()!=null)
{
    camera = weakCamera.get();
}

这样获得的引用是弱引用,在使用的时候系统不会回收,在使用结束以后会在合适的时候回收。

所以说,WeakReference适合使用在一些比较耗费资源的对象上,对移动设备来说是一个很好的东西。

参考 Java WeakReference的理解与使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值