Android中弱引用和软引用的应用场景

来源:互联网 发布:linux的syslog开启 编辑:程序博客网 时间:2024/05/29 18:51

1,弱引用

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

主要作用:可以防止内存泄漏

使用场景:全局的Map对象用于保存某种映射的时候 一定一定要用弱引用来保存对象,因为全局变量一般是static的,他的生命周期一定长于单个对象,如果用弱引用来保存对象,当对象回收时,如果是强引用,就会发生内存泄漏。

2,软引用

如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存(下文给出示例)。
主要作用:缓存
使用场景:对于Bitmap的加载,非常耗费时间,我们希望把加载过的Bitmap做缓存来节省加载的时间。
可是Bitmap非常的吃内存,我们不希望OOM,所以使用软引用,在系统内存不足时,此部分内存会被重新回收,避免OOM。

强引用-》软引用-》弱引用-》虚引用

虚引用的应用场景:使用虚引用完成对象回收后的资源释放工作。
FileCleanTracker,将一个文件与一个对象关联起来,当这个对象被回收之后,把文件也删掉。

阅读全文
0 0