WeakHashMap
是 Java 集合框架的一部分,它提供了一種特殊的 Map 實現,其中的鍵是弱引用的。這意味著,如果沒有其他強引用指向鍵對象,那么鍵對象就可以被垃圾回收器回收,而不需要程序員顯式地從 WeakHashMap
中刪除它。
WeakHashMap
的主要用途是實現緩存或存儲與對象關聯的元數據,而不需要阻止這些對象被垃圾回收。例如,假設你正在編寫一個圖形渲染器,并且想要為每個圖形對象緩存其渲染結果。由于圖形對象可能會頻繁地創建和銷毀,你可能不希望緩存的引用阻止這些對象被垃圾回收。在這種情況下,使用 WeakHashMap
是一個很好的選擇,因為它允許垃圾回收器在內存不足時回收不再需要的圖形對象,同時仍然保留對仍在使用的對象的引用。
WeakHashMap
的工作原理是通過使用弱引用作為鍵來實現的。弱引用是一種不會阻止其所引用的對象被垃圾回收的引用類型。當垃圾回收器運行時,它會清除所有不再被強引用指向的對象。WeakHashMap
內部使用了一個弱引用隊列來跟蹤何時應該刪除鍵值對。當鍵對象被垃圾回收時,其對應的弱引用會被添加到隊列中,WeakHashMap
會在需要時檢查隊列并刪除相應的鍵值對。
需要注意的是,WeakHashMap
并不保證在鍵對象被垃圾回收后立即刪除其鍵值對。實際上,WeakHashMap
的清理過程是延遲的,并且只在需要時進行(例如,當新的鍵值對被添加到映射中時)。因此,如果你需要確保某個特定的鍵值對被刪除,你應該顯式地從 WeakHashMap
中刪除它。