java引用类型的应用

四种:Strong reference,SoftReference, WeakReference, PhatomReference

级别回收时机用途生存时间
从来不会对象的一般状态JVM停止运行时终止
在内存不足时联合ReferenceQueuee(引用队列)构造有效期短、占内存大、生命周期长的对象的二级高速缓冲器(内存不足才清空)内存不足时终止
在垃圾回收时联合ReferenceQueuee构造有效期短、占内存大、生命周期长的对象的一级高速缓冲器(系统发生GC则清空)gc运行后终止
在垃圾回收时联合ReferenceQueuee来跟踪对象被垃圾回收器回收的活动gc运行后终止

下面通过实例介绍引用给我们带来的好处
在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。

软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软/弱引用。

在Android开发中,假设我们的应用会用到大量的默认图片(默认头像),这些图片很多地方用到,若每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低所以我们考虑将图片缓存起来,需要的时候直接从内存中读取。但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常。怎么改善呢

可以考虑使用软/弱引用技术来避免这个问题发生。以下就是高速缓冲器的雏形:

  • 首先定义一个HashMap,保存软引用对象。
private Map <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> ();
  • 再来定义一个方法,保存Bitmap的软引用到HashMap。
    这里写图片描述

使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。

如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

另外可以根据对象是否经常使用来判断选择软引用还是弱引用。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值