天天看點

【JAVA基礎】強引用、弱引用、軟引用、虛引用

1.對象的強、軟、弱和虛引用

  在JDK 1.2以前的版本中,若一個對象不被任何變量引用,那麼程式就無法再使用這個對象。也就是說,隻有對象處于可觸及(reachable)狀态,程式才能使用它。從JDK 1.2版本開始,把對象的引用分為4種級别,進而使程式能更加靈活地控制對象的生命周期。這4種級别由高到低依次為:強引用、軟引用、弱引用和虛引用。圖1為對象應用類層次。

【JAVA基礎】強引用、弱引用、軟引用、虛引用

2、強引用    平時我們程式設計的時候例如:Object object=new Object();那object就是一個強引用了。如果一個對象具有強引用,那就類似于必不可少的生活用品,垃圾回收器絕不會回收它。當記憶體空 間不足,Java虛拟機甯願抛出OutOfMemoryError錯誤,使程式異常終止,也不會靠随意回收具有強引用的對象來解決記憶體不足問題。

3、軟引用(SoftReference)    如果一個對象隻具有軟引用,那就類似于可有可物的生活用品。如果記憶體空間足夠,垃圾回收器就不會回收它,如果記憶體空間不足了,就會回收這些對象的記憶體。隻 要垃圾回收器沒有回收它,該對象就可以被程式使用。軟引用可用來實作記憶體敏感的高速緩存。 軟引用可以和一個引用隊列(ReferenceQueue)聯 合使用,如果軟引用所引用的對象被垃圾回收,Java虛拟機就會把這個軟引用加入到與之關聯的引用隊列中。

4、弱引用(WeakReference)  

   如果一個對象隻具有弱引用,那就類似于可有可物的生活用品。弱引用與軟引用的差別在于:隻具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它 所管轄的記憶體區域的過程中,一旦發現了隻具有弱引用的對象,不管目前記憶體空間足夠與否,都會回收它的記憶體。不過,由于垃圾回收器是一個優先級很低的線程, 是以不一定會很快發現那些隻具有弱引用的對象。  弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回 收,Java虛拟機就會把這個弱引用加入到與之關聯的引用隊列中。

繼續閱讀