Java中強引用、弱引用、軟引用、虛引用的區別

Java對象引用類型分爲強引用、軟引用、弱引用和虛引用。

強引用:就是我們一般聲明對象是時虛擬機生成的引用,強引用環境下,垃圾回收時需要嚴格判斷當前對象是否被強引用,如果被強引用,則不會被垃圾回收

軟引用:軟引用一般被做爲緩存來使用。與強引用的區別是,軟引用在垃圾回收時,虛擬機會根據當前系統的剩餘內存來決定是否對軟引用進行回收。如果剩餘內存比較緊張,則虛擬機會回收軟引用所引用的空間;如果剩餘內存相對富裕,則不會進行回收。換句話說,虛擬機在發生OutOfMemory時,肯定是沒有軟引用存在的。

弱引用:弱引用與軟引用類似,都是作爲緩存來使用。但與軟引用不同,弱引用在進行垃圾回收時,是一定會被回收掉的,因此其生命週期只存在於一個垃圾回收週期內。

虛引用:深入理解JAVA虛擬機一書中有這樣一句描述:“爲一個對象設置虛引用關聯的唯一目的就是能在這個對象被收集器回收時收到一個系統通知”。所以虛引用更多的是用於對象回收的監聽,能做的功能如下:

  1. 重要對象回收監聽 進行日誌統計
  2. 系統gc監聽 因爲虛引用每次GC都會被回收,那麼我們就可以通過虛引用來判斷gc的頻率,如果頻率過大,內存使用可能存在問題,才導致了系統gc頻繁調用

強引用不用說,我們系統一般在使用時都是用的強引用。而“軟引用”和“弱引用”比較少見。他們一般被作爲緩存使用,而且一般是在內存大小比較受限的情況下做爲緩存。因爲如果內存足夠大的話,可以直接使用強引用作爲緩存即可,同時可控性更高。因而,他們常見的是被使用在桌面應用系統的緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章