Java中四种引用
- 强引用(
StrongReference
):最普遍的引用,如果一个对象具有强引用,那么GC绝对不会回收它,当内存不足时候,Java虚拟机宁愿OOM,使程序终止,也不会回收强引用的对象来解决内存不足问题 - 软引用(
SoftReference
):如果一个对象只具有软引用,那么内存空间足够就不回收它;如果内存不足就回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可以用来实现内存敏感的高速缓存 - 弱引用(
WeakReference
):弱引用和软引用的区别在于,只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现只具有弱引用的对象,不管当前内存空间是否足够,都会回收它的内存。不过,由于垃圾回收器线程是一个级别很低的线程,因此不一定很快发现那些只具有弱引用的对象 - 虚引用(
PhantomReference
),形同虚设,与其它几个引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,任何时候都可以被回收。虚引用主要用来跟踪对象被来及回收器回收的活动
;虚引用和弱引用的区别在于:虚引用必须(弱引用即软引用可以,引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中)和引用队列联合使用,当垃圾回收器准备回收一个对象时,就会在回收对象内存之前,把这个引用加入到与之关联的引用队列
实例:
在Handler中使用了WeakReference
,一旦Activity销毁了,再做异步的请求没有什么意义,内存泄漏的问题不允许存在,一旦gc发现,不管内存是否充足,处理掉。