java.lang.ref包

一、引用基類

Reference是所有引用對象的基類,引用對象的實現(xiàn)都是與GC操作相關(guān)的。

二、引用分類

1、強引用(Strong Reference)

? 簡單來說,形如?A a= new A()格式,此時a就是強引用,即使jvm內(nèi)存不足拋出OutOfMemoryError錯誤,也不會被回收的對象

2、軟引用(Soft Reference)

? 強度僅次于Strong Reference的引用類型,jvm內(nèi)存足夠時不會回收該類型對象,內(nèi)存不夠快要OutOfMemoryError之前才會嘗試進行回收該類型引用對象。

注:只要垃圾回收器沒有回收它,該對象就可以被程序使用。結(jié)合ReferenceQueue一起使用,

ReferenceQueue queue = new ReferenceQueue ();

SoftReference sr = new SoftReference(object, queue);

即可在快要被回收前再次獲取該對象的強應(yīng)用,避免被回收。

Object obj = sr.get();

? 軟引用最常見的使用場景是可用來實現(xiàn)內(nèi)存敏感的高速緩存。

3、弱引用(Weak Reference)

? 弱引用與軟引用的區(qū)別在于:只具有弱引用的對象擁有更短暫的生命周期。

? GC線程一旦發(fā)現(xiàn)了只具有弱引用的對象,不管當(dāng)前內(nèi)存空間足夠與否,都會回收它的內(nèi)存。不過,由于垃圾回收器是一個優(yōu)先級很低的線程,因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象。

4、虛引用(Phantom Reference)

? 最顯著的特點是始終無法通過get()獲取到所引用的對象,并且不像軟引用、弱引用會自動回收內(nèi)存,虛引用的存在(雖然內(nèi)存還是會被回收)更傾向于發(fā)送通知,當(dāng)一個對象確定會被回收之后(此時虛引用中的引用對象并不能確定是否已經(jīng)被回收內(nèi)存了,而軟引用和弱引用一定是被回收內(nèi)存了的),就會向應(yīng)用程序發(fā)送一個通知(進入隊列和出隊列)

三、Reference和ReferenceQueue

一句話概括ReferenceQueue是jvm底層的GC程序與上層應(yīng)用程序溝通的橋梁,當(dāng)GC修改不可達對象的狀態(tài)后,會入ReferenceQueue隊列,應(yīng)用可根據(jù)隊列信息進行相對應(yīng)的處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我現(xiàn)在很少主動談為為,尤其跟學(xué)習(xí)相關(guān),因為教育是一件長遠(yuǎn)的事情,很難憑借某幾天的表現(xiàn),輕易得出結(jié)論。但是,通過一段...
    小為為媽閱讀 314評論 0 0
  • 感恩今天天空下起下雨,感恩父母恩情,感恩朋友,感恩今天的一切
    26a658189666閱讀 164評論 0 0
  • 一個人真正的強大,并非只看他能做什么,而是看他能承擔(dān)什么。時間最會騙人,但也能讓你明白,這個世界沒有什么不能失去的...
    只要你需要我都在這里閱讀 164評論 0 0

友情鏈接更多精彩內(nèi)容