(學習筆記)軟引用與弱引用理解使用
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。