java的四大引用型別

顏顏顏顏顏越發表於2020-10-06

Java中的引用型別有四個級別

分別為強引用 軟引用 弱引用和虛引用

強引用:

比如一個物件被強引用了,那麼垃圾回收機制絕對不會回收它,寧願丟擲 OutOfMemoryError 錯誤,使程式異常終止。

軟引用:

如果一個物件只具有軟引用,那麼如果記憶體空間足夠的時候,垃圾回收器就不會回收它,如果記憶體空間不夠了,就會回收這些物件的記憶體,只要垃圾回收器沒有回收,改物件就可以被程式使用。

主要用於記憶體敏感的快取記憶體。在 jvm 報告記憶體不足之前會清除所有的軟引用,這樣以來 gc 就 有可能收集軟引用的物件,可能解決記憶體吃緊問題,避免記憶體溢位。

弱引用:

如果一個物件只具有弱引用,那該類就是可有可無的物件,因為只要該物件被 gc 掃描到了隨時都會把它幹掉。弱引用與軟引用的區別在於:只具有弱引用的物件擁有更短暫的生命週期。在垃圾回收器執行緒掃描它所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。不過, 由於垃圾回收器是一個優先順序很低的執行緒, 因此不一定會很快發現那些只具有弱引用的物件。

虛引用:

虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。虛引用主要用來跟蹤物件被垃圾回收的活動**。**

虛引用必須和引用佇列(ReferenceQueue)聯合使用。當垃圾回收

器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之關聯的引用

佇列中。程式可以通過判斷引用佇列中是否已經加入了虛引用,來了解被引用的物件是否將要被垃圾回收。程式如果發現

**某個虛引用已經被加入到引用佇列,那麼就可以在所引用的物件的記憶體被回收之前採取必要的行動

相關文章