1. 程式人生 > >java 強引用 / 弱引用 / 軟引用 / 虛引用

java 強引用 / 弱引用 / 軟引用 / 虛引用

強引用:

當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。是最常用的引用,例如:Object object = new Object();

 

軟引用(SoftReference):

記憶體空間足夠,垃圾回收器就不會回收它,如果記憶體空間不足了,就會回收這些物件的記憶體。

應用場景:軟引用通常用來實現記憶體敏感的快取。如果還有空閒記憶體,就可以暫時保留快取,當記憶體不足時清理掉,這樣就保證了使用了快取的同時,不會耗盡記憶體。例如:圖片快取

 

弱引用(WeakReference):

在垃圾回收器執行緒掃描它所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。但是,垃圾回收器是一個優先順序很低的執行緒, 所以不一定會很快發現那些只具有弱引用的物件

使用場景和軟引用差不多。只是,弱引用軟引用的區別在於:只具有弱引用的物件擁有更短暫的生命週期

 

虛引用(PhantomReference):

虛引用的主要作用是跟蹤物件被垃圾回收的狀態。與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。

 

在程式設計中,一般很少使用弱引用與虛引用,使用軟引用的情況較多,這是因為軟引用可以加速JVM對垃圾記憶體的回收速度,可以維護系統的執行安全,防止記憶體溢位(OutOfMemory)等問題的產生。