Java核心技術(shù)——強引用、軟引用、弱引用、幻象引用

1. 前言

今天學習了「Java核心技術(shù)36講」的第4講關(guān)于強引用、軟引用、弱引用、幻象引用的區(qū)別,理解了引用對于Java對象生命周期與JVM內(nèi)部相關(guān)機制,在這里總結(jié)一下相關(guān)的知識點

2. Java中的數(shù)據(jù)類型

  • 原始數(shù)據(jù)類型
    包括了byte、int、char、long、float、double、boolean和short,還有對應的封裝類Boolean、Character、Byte、Short、Integer、Long、Float、Double,在聲明原始數(shù)據(jù)類型的變量后會直接將值存儲在棧(stack)中,所以原始數(shù)據(jù)類型的缺省值是根據(jù)不同類型說定,如:int類型的缺省值為0
  • 引用數(shù)據(jù)類型
    包括class、interface、array,在聲明引用數(shù)據(jù)類型的變量后在棧(stack)中存儲的只是內(nèi)存地址(類似C/C++的指針),真正的值是存在堆(heap)中,所以引用類型的缺省值為null
  • 知識點的應用
    • 引用數(shù)據(jù)類型間的"=="判斷內(nèi)存地址是否相等,想判斷內(nèi)容實體需要使用equals
    • 原始數(shù)據(jù)類型傳值傳參傳的是副本,修改后原值不變;而引用數(shù)據(jù)類型傳值傳參穿的是地址,修改后原值改變

3. 四種引用

不同的引用類型,主要體現(xiàn)的是對象不同的可達性(reachable)狀態(tài)和對垃圾回收的影響

3.1 強引用(StrongReference)

強引用是我們最常使用的普通對象引用,舉個例子:

Object obj = new Object();//這種就是強引用

只要有強引用指向的對象,就表明這個對象不會被回收,即使JVM內(nèi)存空間不足,拋出OutOfMemoryError(OOM)也不會回收具有強引用的對象。對于一個普通的對象,如果沒有其他的引用關(guān)系,在超過了引用的作用域或者顯示地將其賦值為null時,才可被垃圾收集

3.2 軟引用(SoftReference)

通過SoftReference類實現(xiàn),軟引用的生命周期比強引用較短,當JVM內(nèi)存不足時,才會試圖去回收軟引用指向的對象,即在拋出OutOfMemoryError前清理軟引用指向的對象。

  • 應用場景:圖片緩存框架

3.3 弱引用(WeakReference)

通過WeakReference類實現(xiàn),弱引用的生命周期比軟引用還短。在垃圾回收器線程掃描內(nèi)存區(qū)域時,一旦發(fā)現(xiàn)了具有弱引用的對象,不論當前內(nèi)存空間是否充足,都會進行回收。

3.4 幻象引用(PhantomReference)

也可以叫做虛引用(還有人叫幽靈引用),通過PhantomReference類實現(xiàn)。無法通過虛引用訪問對象的任何屬性或函數(shù),幻象引用只提供了一種確保對象被finalize后,做某些事情的機制。如果一個對象只有幻象引用,那么它隨時可能被垃圾回收器回收。

4. 總結(jié)

由于之前的學習比較隨意,導致很多知識點的掌握程度都很低,平時的開發(fā)過程中并沒有直接使用到后三種引用,所以對這四種引用都不了解,甚至沒有聽過后三種引用。由此可見學習還是得腳踏實地,熟悉掌握了這些基礎(chǔ)的知識,對以后設(shè)計緩存等框架,診斷OOM等問題都有很大幫助。

另外這里貼一個評論區(qū)的兄弟(@海怪哥哥)的理解,挺有意思的:

強引用就像大老婆,關(guān)系很穩(wěn)固
軟引用就像二老婆,隨時有失寵的可能,但也有可能扶正
弱引用就像情人,關(guān)系不穩(wěn)定,可能跟別人跑了
幻象引用就是夢中情人,只在夢中出現(xiàn)過

5. 最后

本文部分內(nèi)容摘抄于「極客時間」的Java核心技術(shù)36講中的內(nèi)容和評論中@代碼榮耀這個兄弟,在此感謝!

歡迎來看我的博客 RoNnx的博客

最后編輯于
?著作權(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)容

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