Java核心技術(shù)——強(qiáng)引用劫谅、軟引用见坑、弱引用、幻象引用

1. 前言

今天學(xué)習(xí)了「Java核心技術(shù)36講」的第4講關(guān)于強(qiáng)引用捏检、軟引用荞驴、弱引用、幻象引用的區(qū)別贯城,理解了引用對于Java對象生命周期與JVM內(nèi)部相關(guān)機(jī)制熊楼,在這里總結(jié)一下相關(guān)的知識點(diǎn)

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

  • 原始數(shù)據(jù)類型
    包括了byte、int能犯、char鲫骗、long、float踩晶、double执泰、boolean和short,還有對應(yīng)的封裝類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
  • 知識點(diǎn)的應(yīng)用
    • 引用數(shù)據(jù)類型間的"=="判斷內(nèi)存地址是否相等,想判斷內(nèi)容實(shí)體需要使用equals
    • 原始數(shù)據(jù)類型傳值傳參傳的是副本做修,修改后原值不變霍狰;而引用數(shù)據(jù)類型傳值傳參穿的是地址,修改后原值改變

3. 四種引用

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

3.1 強(qiáng)引用(StrongReference)

強(qiáng)引用是我們最常使用的普通對象引用蔗坯,舉個例子:

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

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

3.2 軟引用(SoftReference)

通過SoftReference類實(shí)現(xiàn)赴魁,軟引用的生命周期比強(qiáng)引用較短卸奉,當(dāng)JVM內(nèi)存不足時,才會試圖去回收軟引用指向的對象颖御,即在拋出OutOfMemoryError前清理軟引用指向的對象榄棵。

  • 應(yīng)用場景:圖片緩存框架

3.3 弱引用(WeakReference)

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

3.4 幻象引用(PhantomReference)

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

4. 總結(jié)

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

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

強(qiáng)引用就像大老婆逃沿,關(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)系作者
  • 序言:七十年代末究飞,一起剝皮案震驚了整個濱河市置谦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亿傅,老刑警劉巖媒峡,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葵擎,居然都是意外死亡谅阿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門酬滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來签餐,“玉大人,你說我怎么就攤上這事盯串÷乳埽” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵体捏,是天一觀的道長冠摄。 經(jīng)常有香客問我糯崎,道長,這世上最難降的妖魔是什么河泳? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任沃呢,我火速辦了婚禮,結(jié)果婚禮上拆挥,老公的妹妹穿的比我還像新娘薄霜。我一直安慰自己,他們只是感情好纸兔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布惰瓜。 她就那樣靜靜地躺著,像睡著了一般食拜。 火紅的嫁衣襯著肌膚如雪鸵熟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天负甸,我揣著相機(jī)與錄音流强,去河邊找鬼。 笑死呻待,一個胖子當(dāng)著我的面吹牛打月,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚕捉,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼奏篙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迫淹?” 一聲冷哼從身側(cè)響起秘通,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敛熬,沒想到半個月后肺稀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡应民,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年话原,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诲锹。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡繁仁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出归园,到底是詐尸還是另有隱情黄虱,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布庸诱,位于F島的核電站捻浦,受9級特大地震影響盐捷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜默勾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聚谁。 院中可真熱鬧母剥,春花似錦、人聲如沸形导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朵耕。三九已至炫隶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阎曹,已是汗流浹背伪阶。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留处嫌,地道東北人栅贴。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像熏迹,于是被迫代替她去往敵國和親檐薯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容