导语
这个问题之前看过很多遍,其中周志明的《深入理解Java虚拟机》里讲的比较好,其他的基本都是三言两语,没讲原理。本文也不讲原理,只记录我认为需要记住的点。
简介
Strongly Reachable
不需使用Reference即可访问的对象。
Soft Reference
JVM在抛出OOM前会清理Soft reference引用的内存。在Android中,不建议使用Soft Reference做缓存,推荐使用LruCache类。
Weak Reference
比Soft Reference更弱的引用。
PhantomReference
finalizable队列里面会用到。
可达性
Strongly Reachable
不需要使用Reference即可访问的对象。
Softly Reachable
可以通过SoftReference访问的对象。
Weakly Reachable
可以通过WeakReference访问的对象。
Phantom Reachable
已经被finalized了的对象。
Object.finalize()
GC在执行对象回收之前,会调用这个方法。
ReferenceQueue
在创建一个PhantomReference时,会同时创建一个ReferenceQueue。在一个对象的finalize()方法之后,此对象的PhantomReference会进入到ReferenceQueue中。(后面没懂,先这样吧)