Java中的引用型別
-
強引用:直接引用,只要強引用存在就不回收
-
軟引用:描述一些非必須得物件,記憶體不足時可能會回收
-
弱引用:下一次GC掃描到就會回收
-
虛引用:用於在物件回收後執行清理操作,與引用佇列配合使用
-
虛引用在建立時可以指定引用佇列
-
在被回收之後可以透過佇列判斷回收狀態並執行相關操作
-
WeakHashMap
概述:一個弱引用的HashMap,適用於需要快取的場景,但是由於快取有限,不能快取所有的物件,需要可以清理的快取。
WeakHashMap 內部是透過弱引用來管理entry
的,弱引用的特性對應到 WeakHashMap 上意味著什麼呢?將一對key, value
放入到 WeakHashMap 裡並不能避免該key
值被GC回收,除非在 WeakHashMap 之外還有對該key
的強引用。
實現原理
-
弱引用,在WeakHashMap的Entry上繼承了WeakReference,如果這個物件沒有被強引用,那麼就是弱引用物件。
private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V>