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