Carson帶你學(xué)Java:深入解析引用類型-強(qiáng)赠尾、軟、弱毅弧、虛


前言

  • Java中气嫁,對(duì)象的引用類型十分重要,因?yàn)檫@取決于 JVM的GC活動(dòng) & 活動(dòng)
  • 本文全面 & 詳細(xì)解析 Java的4種引用類型:強(qiáng)引用够坐、軟引用寸宵、弱引用、虛引用元咙,希望您們會(huì)喜歡

目錄

示意圖

1. 簡(jiǎn)介

  • JDK 1.2前梯影,Java的引用類型只有2種類型:可達(dá) & 不可達(dá)

若1個(gè)對(duì)象不被任何變量引用,那么程序則無(wú)法再使用該對(duì)象

  • JDK 1.2后開(kāi)始庶香,Java的引用類型分為4種:強(qiáng)引用甲棍、軟引用、弱引用赶掖、虛引用

2. 作用

通過(guò)對(duì) 對(duì)象的引用類型進(jìn)行分級(jí)感猛,從而更加靈活地 控制對(duì)象的生命周期


3. 具體描述

下面七扰,我將詳細(xì)講解Java的4種引用類型:強(qiáng)引用、軟引用陪白、弱引用颈走、虛引用

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

  • 特點(diǎn)
    垃圾回收器不會(huì)回收
  1. 當(dāng)內(nèi)存空間不足,JVM寧愿拋出OutOfMemoryError錯(cuò)誤咱士,使程序異常終止立由,也不會(huì)靠隨意回收具有強(qiáng)引用的對(duì)象來(lái)解決內(nèi)存不足的問(wèn)題
  2. 使用最普遍
  • 使用場(chǎng)景
    該變量不希望被垃圾回收器回收

  • 使用示例(為1個(gè)變量創(chuàng)建強(qiáng)引用)

String s="abc"

// 變量s = 字符串對(duì)象"abc"的一個(gè)強(qiáng)引用
// 注:只要給強(qiáng)引用對(duì)象賦空值null,該對(duì)象就可被垃圾回收器回收
// 即:只要給強(qiáng)引用對(duì)象s賦空值null序厉,該對(duì)象就可以被垃圾回收器回收锐膜。因?yàn)樵搶?duì)象此時(shí)不再含有其他強(qiáng)引用

3.2 軟引用(SoftReference)

  • 特點(diǎn)
    當(dāng)內(nèi)存不足時(shí),垃圾回收器會(huì)回收

  • 應(yīng)用場(chǎng)景
    內(nèi)存敏感的數(shù)據(jù)緩存機(jī)制脂矫,如圖片枣耀、網(wǎng)頁(yè)緩存等

  • 使用示例(為1個(gè)變量創(chuàng)建軟引用)

// 1. 聲明強(qiáng)引用
String str=new String("Test"); 

// 2. 對(duì)str進(jìn)行軟引用
ReferenceQueue<String> rq=new ReferenceQueue<String>(); 
SoftReference<String> sr=new SoftReference<String>(str,rq); 

// 3. 撤掉強(qiáng)引用
str=null;

// 4. 取出軟引用的對(duì)象:s即為str所指引的對(duì)象"Test"
String s=sr.get(); 
 
// 注:
//   a. 軟引用可與1個(gè)引用隊(duì)列聯(lián)合使用
//   b. 若軟引用所引用的對(duì)象被垃圾回收器回收,JVM就會(huì)把這個(gè)軟引用加入到與之關(guān)聯(lián)的引用隊(duì)列中

3.3 弱引用(WeakReference)

  • 特點(diǎn)
    一旦發(fā)現(xiàn)弱引用對(duì)象庭再,無(wú)論內(nèi)存足否捞奕,都會(huì)進(jìn)行回收

即 擁有更短暫的生命周期

  • 應(yīng)用場(chǎng)景
    1.防止內(nèi)存泄漏,保證內(nèi)存被JVM回收
    2.保護(hù)對(duì)象引用

  • 使用示例(為1個(gè)變量創(chuàng)建弱引用)

// 1. 聲明強(qiáng)引用 
Counter counter = new Counter();  
// 2. 聲明弱引用 
WeakReference<Counter> weakCounter = new WeakReference<Counter>(counter);   
// 3. 撤掉強(qiáng)引用
counter = null; 
 
// 注:
//   a. 使用 類似軟引用拄轻,即也可與1個(gè)引用隊(duì)列聯(lián)合使用
//   b. 與軟引用的區(qū)別:具備更短的生命周期

3.4 虛引用(PhantomReference)

  • 特點(diǎn)
    任何時(shí)候都可能被垃圾回收器回收

  • 應(yīng)用場(chǎng)景
    跟蹤對(duì)象被GC回收的活動(dòng)

通過(guò)判斷引用隊(duì)列中是否有虛引用來(lái)了解被引用對(duì)象是否被回收

  • 使用示例(為1個(gè)變量創(chuàng)建虛引用)
// 虛引用 必須 和引用隊(duì)列 (ReferenceQueue)聯(lián)合使用
// 即 當(dāng)垃圾回收器準(zhǔn)備回收一個(gè)對(duì)象時(shí)颅围,若發(fā)現(xiàn)它還有虛引用,在回收對(duì)象的內(nèi)存之前恨搓,把這個(gè)虛引用加入到與之關(guān)聯(lián)的引用隊(duì)列中

// 1. 聲明強(qiáng)引用
DigitalCounter digit = new DigitalCounter(); 

// 2. 聲明虛引用
PhantomReference phantom = new PhantomReference(digit);  

// 3. 撤掉強(qiáng)引用
digit = null;

至此院促,關(guān)于Java的4種引用類型:強(qiáng)引用、軟引用斧抱、弱引用常拓、虛引用 講解完畢。


4. 總結(jié)

本文全面講解Java的4種引用類型:強(qiáng)引用辉浦、軟引用弄抬、弱引用、虛引用宪郊,總結(jié)如下:

示意圖

歡迎關(guān)注Carson_Ho的簡(jiǎn)書(shū)掂恕!

分享Android技術(shù)干貨,追求短弛槐、平懊亡、快,但卻不缺深度乎串。


請(qǐng)點(diǎn)贊店枣!因?yàn)槟愕墓膭?lì)是我寫(xiě)作的最大動(dòng)力!

相關(guān)文章閱讀
Carson帶你學(xué)Android:學(xué)習(xí)方法
Carson帶你學(xué)Android:四大組件
Carson帶你學(xué)Android:自定義View
Carson帶你學(xué)Android:異步-多線程
Carson帶你學(xué)Android:性能優(yōu)化
Carson帶你學(xué)Android:動(dòng)畫(huà)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸯两,隨后出現(xiàn)的幾起案子坏瞄,更是在濱河造成了極大的恐慌,老刑警劉巖甩卓,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蕉斜,居然都是意外死亡逾柿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)宅此,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)机错,“玉大人,你說(shuō)我怎么就攤上這事父腕∪醴耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵璧亮,是天一觀的道長(zhǎng)萧诫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)枝嘶,這世上最難降的妖魔是什么帘饶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮群扶,結(jié)果婚禮上及刻,老公的妹妹穿的比我還像新娘。我一直安慰自己竞阐,他們只是感情好缴饭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著骆莹,像睡著了一般颗搂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汪疮,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天峭火,我揣著相機(jī)與錄音,去河邊找鬼智嚷。 笑死卖丸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盏道。 我是一名探鬼主播稍浆,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衅枫?” 一聲冷哼從身側(cè)響起嫁艇,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弦撩,沒(méi)想到半個(gè)月后步咪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡益楼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年猾漫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片感凤。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悯周,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陪竿,到底是詐尸還是另有隱情禽翼,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布族跛,位于F島的核電站闰挡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庸蔼。R本人自食惡果不足惜解总,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姐仅。 院中可真熱鬧花枫,春花似錦、人聲如沸掏膏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馒疹。三九已至佳簸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颖变,已是汗流浹背生均。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腥刹,地道東北人马胧。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衔峰,于是被迫代替她去往敵國(guó)和親佩脊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛙粘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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