1. 程式人生 > >Java中的引用型別(強引用、軟引用、弱引用、虛引用)

Java中的引用型別(強引用、軟引用、弱引用、虛引用)

  1. 強引用
    是指建立一個物件並把這個物件賦給一個引用變數;
    強引用有引用變數指向時永遠不會被垃圾回收,即使記憶體不足的時候。

2.軟引用
軟引用通過SoftReference類來實現
軟引用的物件當系統記憶體充足時和強引用沒有太多區別,但記憶體不足時會回收軟引用的物件。

注:當系統記憶體充足時,系統不會進行軟引用的記憶體回收, 當系統不足時將會回收軟引用的物件。
當用 java -Xmx1m -Xms1m SoftReferenceTest 命令時強制堆記憶體為1m時 軟引用引用物件將被回收。(可以建立10000個物件)

3.弱引用(weakReference)
弱引用通過weakReference類來實現
弱引用具有很強的不確定性。因為垃圾回收每次都會回收弱引用的物件。

4.虛引用

  • 軟引用和弱引用可以單獨使用,虛引用不能單獨使用,虛引用的作用是就跟蹤物件被垃圾回收的狀態,程式可以通過檢測與虛引用關聯的虛引用佇列是否已經包含了指定的虛引用,從而瞭解虛引用的物件是否即將被回收。

  • PhantomReference物件實現

  • 虛引用通過PhantomRefence類實現,它本身對物件沒有影響,類似與沒有應用,物件甚至感覺不到虛引用的存在,如果一個物件只有一個虛引用存在,那麼他就類似沒有應用存在。

  • 當程式強制垃圾回收後,只有虛引用引用字串物件將會被垃圾回收,當被引用的物件被回收後,對應的引用將被新增到關聯的引用佇列中。

4.軟引用
如果使用軟引用,弱引用,虛引用的引用方式引用物件,垃圾回收就能夠隨意的釋放這些物件,若果希望儘可能減小程式在起宣告週期中所佔用的記憶體大小,可以靈活使用這些引用。

如果使用了這些引用就不能保留這些物件的強引用(強制引用應該置null),否則就浪費了這些類提供的任何好處。