我們都知道Java中內(nèi)存是通過GC自動管理的,GC會在程序運(yùn)行過程中自動判斷哪些對象是可以被回收的,并在合適的時(shí)機(jī)進(jìn)行內(nèi)存釋放。GC判斷某個(gè)對象是否可被回收的依據(jù)是,是否有有效的引用指向該對象。
如果沒有有效引用指向該對象(基本意味著不存在訪問該對象的方式),那么該對象就是可回收的。這里的有效引用 并不包括弱引用。也就是說,雖然弱引用可以用來訪問對象,但進(jìn)行垃圾回收時(shí)弱引用并不會被考慮在內(nèi),僅有弱引用指向的對象仍然會被GC回收。
WeakHashMap 內(nèi)部是通過弱引用來管理entry的,弱引用的特性對應(yīng)到 WeakHashMap 上意味著什么呢?
WeakHashMap 里的entry可能會被GC自動刪除,即使程序員沒有調(diào)用remove()或者clear()方法。
WeakHashMap 的這個(gè)特點(diǎn)特別適用于需要緩存的場景。在緩存場景下,由于內(nèi)存是有限的,不能緩存所有對象;對象緩存命中可以提高系統(tǒng)效率,但緩存MISS也不會造成錯(cuò)誤,因?yàn)榭梢酝ㄟ^計(jì)算重新得到。