導(dǎo)語
這個問題之前看過很多遍,其中周志明的《深入理解Java虛擬機》里講的比較好,其他的基本都是三言兩語言缤,沒講原理。本文也不講原理禁灼,只記錄我認(rèn)為需要記住的點管挟。
簡介
Strongly Reachable
不需使用Reference即可訪問的對象。
Soft Reference
JVM在拋出OOM前會清理Soft reference引用的內(nèi)存弄捕。在Android中僻孝,不建議使用Soft Reference做緩存,推薦使用LruCache類守谓。
Weak Reference
比Soft Reference更弱的引用穿铆。
PhantomReference
finalizable隊列里面會用到。
可達(dá)性
Strongly Reachable
不需要使用Reference即可訪問的對象斋荞。
Softly Reachable
可以通過SoftReference訪問的對象荞雏。
Weakly Reachable
可以通過WeakReference訪問的對象。
Phantom Reachable
已經(jīng)被finalized了的對象平酿。
Object.finalize()
GC在執(zhí)行對象回收之前凤优,會調(diào)用這個方法。
ReferenceQueue
在創(chuàng)建一個PhantomReference時蜈彼,會同時創(chuàng)建一個ReferenceQueue筑辨。在一個對象的finalize()方法之后,此對象的PhantomReference會進入到ReferenceQueue中幸逆。(后面沒懂棍辕,先這樣吧)