1. 程式人生 > >你不可不知的Java引用型別之——WeakReference原始碼詳解

你不可不知的Java引用型別之——WeakReference原始碼詳解

定義

WeakReference是弱引用,該引用不會影響垃圾回收器對物件的回收,不會影響物件的生命週期。

說明

當虛擬機器在某個時間點決定要回收一個弱可達(weakly-reachable)物件時,會自動清除該物件的所有弱引用。並且會將物件變為finalizable狀態,然後把這些剛清除的弱引用放到其註冊的引用佇列中。

[前面已經說明過WeakReference的用法了,本篇僅對WeakReference從原始碼角度做一些補充。

原始碼

public class WeakReference<T> extends Reference<T> {
    public WeakReference(T referent) {
        super(referent);
    }
    
    public WeakReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }
    
}

嗯,十行程式碼,可以說是很簡單的一個類了,只有兩個建構函式,一個傳引用佇列,另一個不傳,沒有覆蓋父類Reference的任何方法。

WeakHashMap

說到WeakReference,自然不能不說WeakHashMap,這個map的用法與hashmap基本一致,它的特點便是使用弱引用作為key,這就讓它有一個很重要的特性,它可以自動清除自身,這樣就不需要再像之前SoftReference那樣需要手動去釋放引用例項。

關於WeakHashMap會在另一篇中有詳細的介紹,這裡就不多說了。

好像。。。沒什麼可講的了。在前面弱引用一篇裡基本都講完了。