標籤:系統 操作 span person out 緩衝 代碼 更新 bag
1、強引用(Strong Reference)在 Java 中四種引用中是“最強”的,我們平時通過 new 關鍵字建立的對象都屬於強引用,如下面的代碼:
Person person = new Person();
其中的 person 就是一個強引用,只有當它不再被使用後才會被記憶體回收行程回收掉。當記憶體不足時,但是其依然在被使用中,那麼記憶體回收行程也不會回收其引用的對象;JVM 寧願報“記憶體流失錯誤 (OutofMemoryError)”,終止程式也不會回收此引用所關聯的對象。
2、軟引用(Soft Reference)是比強引用要弱一級的引用,當記憶體不足時即可被記憶體回收行程(garbage collection)回收,記憶體充足是不被記憶體回收行程(garbage collection)回收;通常用於實現快取,顧名思義,快取要求速度快,我們通常將資料放置到記憶體中來實現,出於成本的考慮,記憶體的大小終究是有限,這就要求我們提煉出訪問高頻,更新低頻的資料放入到緩衝中;隨著放入的資料越來越多時,記憶體出現不足,JVM 通過 GC 回收一部分記憶體資源,並不影響用戶端的訪問,因為我們在資料庫中有完整的資料,從而避免系統的宕機。下面是範例程式碼,用於建立一個軟引用:
Person person = new Person();
SoftReference<Person> personSoftReference = new SoftReference(person);
其中的 personSoftReference 被稱為軟引用,引用的是 new Person() 這個對象;
3、弱引用(Weak Reference)是比軟引用弱一級的引用,只要被記憶體回收行程(garbage collection)掃描到就會被即刻回收,不管記憶體夠不夠。弱引用通常與引用隊列(Reference Queue)一起使用,記憶體回收行程在回收弱引用關聯的對象之前會先將其放入到引用隊列中,我們可以監聽這個引用隊列(Reference Queue),當引用隊列中有了此對象,那麼就可以在其被回收前做我們的操作。範例程式碼如下:
Person person = new Person();
WeakReference<Person> personWeakReference = new WeakReference(person);
其中的 personSoftReference 被稱為弱引用,引用的是 new Person() 這個對象;
4、虛引用(Phantom Reference)是“最弱”的一種引用,可有可無的引用,也可以理解為幾乎沒有引用,隨時可能被記憶體回收行程(garbage collection)回收掉;事實上也是如此,一旦被記憶體回收行程(garbage collection)掃描到就即刻被其回收。主要用於追蹤記憶體回收行程的行為。虛引用和弱引用一樣,通常和引用隊列(Reference Queue)一起使用,當記憶體回收行程(garbage collection)回收弱引用關聯的對象前將其放入到引用隊列中,同樣的我們可以監聽這個隊列,一旦有新的虛引用被放入就執行我們預定好的程式。範例程式碼如下
Person person = new Person();
PhantomReference<Person> personPhantomReference = new PhantomReference(person);
其中的 personSoftReference 被稱為虛引用,引用的是 new Person() 這個對象;
Java 中的四種引用