Java引用型別與WeakHashMap

枫叶藏在眼眸發表於2024-08-24

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>

相關文章