1. 程式人生 > >(學習筆記)軟引用與弱引用理解使用

(學習筆記)軟引用與弱引用理解使用

Java 的四種引用方式:強引用,弱引用,軟引用,虛引用

強引用:只有引用始終存在,回收器即不會將其回收

Object object = new Object();

為了保證引數的長久性,這種方式最為常見

如果不需要Object引用 可賦為空值

最常見的方式,JVM 寧願丟擲異常,也絕對 不會

去回收一個強引用

軟引用:

軟引用主要用來實現快取的功能,一旦記憶體有發生溢位的危險,它會被釋放掉,但是同時

它的釋放不能干擾程式的正常執行

Object object = new Object();

SofeReference<Object> sf = new SoftReference<Object>(obj);

obj=null;

sf.get可以得到當前的物件,有時候會返回為null

記憶體足夠的情況,可以通過軟引用取值,提升速度

記憶體不足,自動刪除部分快取,節約空間

弱引用:

第二次垃圾回收的回收

弱引用主要用於監控物件是否已經被垃圾處理標記為即將回收的

垃圾回收器的優先順序較低,它不會很快的發現jvm中的弱引用物件,但是一旦發現了某物件只有弱引用的作用時

回收器會將其回收,所以弱引用的生命週期相當短暫,它的特性意味著,一旦被 發現,就會被消滅。

與此相比,軟引用的生命週期算得上是很長的了。不過它們兩個都要與佇列共同使用

弱引用和軟引用皆可以和一個引用對列聯合使用,但不是必須的

虛引用:

虛引用主要用於檢測物件是否已經被回收器刪除

虛引用在每次垃圾回收的時候都會被回收

用的比較少

虛引用必須和引用對列一起使用,它任何時候都會被回收器回收掉。

這是同時是虛引用 和軟引用和弱引用的區別之處

一個經典的案例:一個JAVA語言實現的資訊查詢類程式,如果 會反覆檢視某種

資訊,我們可以有兩種選擇,一是將其快取,再次訪問節約的 時間,二是重新獲取 ,

這樣極其消耗時間,但是快取的數量越來越大,為了避免記憶體OOM,我們只能

選擇軟引用比較好,一旦SoftReference儲存了對一個Java物件的軟引用後,

在垃圾執行緒對這個Java物件回收前,S

oftReference類所提供的get()方法返回Java物件的強引用。另外,一旦垃圾執行緒回收該Java物件之後,get()方法將返回null。