Java四種引用類型

java不同于c/c++绷跑,它不需要程序員自已來管理內(nèi)存(分配椅野,釋放內(nèi)存),java 會自己來管理內(nèi)存榜旦,比如銷毀某些不再被使用的對象幽七。這些回收的操作都有jvm后臺的GC線程自己完成,但是在一些情況下章办,程序員因為開發(fā)環(huán)境和需求等因素锉走,想介入這些回收的過程,至少是擁有一點點操控的權(quán)利藕届,JDK給予了用戶這樣的操作入口挪蹭,即四種引用類型。

強引用(Strong References)

強引用類型是我們平時寫代碼的時候最常用的引用休偶,比如

Sample sample = new Sample();

new就是強引用梁厉,是在java堆中開辟一段內(nèi)存空間,如果接下來

sample = null;

將引用指向一個空指針或者指向其他對象踏兜,那么剛才new出來的對象就沒有引用指向他词顾,在GC進行可達性分析得時候就沒法找到鏈路能到達它,于是他會被回收掉碱妆。


軟引用(Soft References)

Sample sample = new Sample();  //首先用強引用sample指向該對象

/**使用java軟引用類SoftReference
 * 需要注意的是肉盹,softRef這個引用也是強引用,它是指向SoftReference這個對象的
 * 真正的軟引用被包裝在了softRef中
 */
SoftReference<Sample> softRef = new SoftReference<Sample>(sample);

//查看java.lang.Reference源碼發(fā)現(xiàn)
private T referent;     //這個才是軟引用疹尾, 只被jvm使用

軟引用在很多時候跟強引用一樣上忍,沒有人指向該對象的時候,對象就會被回收纳本,只不過窍蓝,還有一種會被回收的情況就是,如果堆內(nèi)存不足了繁成,GC會把軟引用也回收吓笙,不管有沒有人指向他。

軟引用的構(gòu)造方法還可以傳入ReferenceQueue巾腕,如下

private static final ReferenceQueue<Sample> QUEUE = new ReferenceQueue<>();
SoftReference<Sample> softRef = new SoftReference<Sample>(sample, QUEUE);

這個隊列的作用就是當jvm回收某個軟引用對象之后會將該SoftReference對象(例子中的softRef對象)添加進這個隊列面睛,因此我們就知道這個對象啥時候被回收了,具體使用如下:

//while外面可以用定時器包裝
 while (true) {
       Reference<? extends Sample> poll = QUEUE.poll();
       if (poll != null) {
       //poll是softRef對象地址,不是referent地址
       System.out.println("--- 軟引用對象被jvm回收了 ---- " + poll);  
 }

打印結(jié)果


ReferenceQueue這個隊列除了強引用之外祠墅,其他三種引用都可以用侮穿。

弱引用(Weak Reference)

GC進行垃圾收集的時候,如果一個對象只有弱引用指向它毁嗦,那么和沒有引用指向它是一樣的效果亲茅,GC都會回收他。也就是說,弱引用對象只能活到下一次GC克锣。

WeakReference<Sample> weakRef = new WeakReference<Sample>(sample, QUEUE);

虛引用(Phantom Reference)

虛引用的構(gòu)造方法必須強制傳入ReferenceQueue茵肃,因為在jvm回收前(重點: 對,就是回收前袭祟,軟引用和弱引用都是回收后)验残,會將PhantomReference對象加入ReferenceQueue中;還有一點就是PhantomReference.get()方法永遠返回空巾乳,不管對象有沒有被回收您没,就是說無法通過虛引用來獲取對象實例。那么胆绊,其實虛引用對于一個對象來說不起任何作用氨鹏,可有可無。

PhantomReference<Sample> phantomRef = new PhantomReference<>(sample, QUEUE);

那么為什么要引入虛引用压状,虛引用的唯一目的就是在一個對象實例被GC回收時仆抵,通過ReferenceQueue能獲得該對象被清理的消息通知

本文整理自:http://blog.csdn.net/rodbate/article/details/72857447
感謝大佬V侄A统蟆!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娱两,一起剝皮案震驚了整個濱河市莺匠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌十兢,老刑警劉巖慨蛙,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纪挎,居然都是意外死亡,警方通過查閱死者的電腦和手機跟匆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門异袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玛臂,你說我怎么就攤上這事烤蜕。” “怎么了迹冤?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵讽营,是天一觀的道長。 經(jīng)常有香客問我泡徙,道長橱鹏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮莉兰,結(jié)果婚禮上挑围,老公的妹妹穿的比我還像新娘。我一直安慰自己糖荒,他們只是感情好杉辙,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捶朵,像睡著了一般蜘矢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上综看,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天品腹,我揣著相機與錄音,去河邊找鬼寓搬。 笑死珍昨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的句喷。 我是一名探鬼主播镣典,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唾琼!你這毒婦竟也來了兄春?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤锡溯,失蹤者是張志新(化名)和其女友劉穎赶舆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭饭,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡芜茵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倡蝙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片九串。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寺鸥,靈堂內(nèi)的尸體忽然破棺而出猪钮,到底是詐尸還是另有隱情,我是刑警寧澤胆建,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布烤低,位于F島的核電站,受9級特大地震影響笆载,放射性物質(zhì)發(fā)生泄漏扑馁。R本人自食惡果不足惜涯呻,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望檐蚜。 院中可真熱鬧魄懂,春花似錦、人聲如沸闯第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咳短。三九已至填帽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咙好,已是汗流浹背篡腌。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勾效,地道東北人嘹悼。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像层宫,于是被迫代替她去往敵國和親杨伙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 強引用 強引用是我們接觸最多的引用萌腿,若果是強引用JVM寧愿拋出OOM也不愿回收具有強引用的對象限匣。 軟引用 具有軟引...
    忘凈空閱讀 467評論 0 1
  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供...
    簡欲明心閱讀 89,410評論 17 311
  • 前言 不知道大家有沒有這樣一種感覺,程序員的數(shù)量井噴了贮庞÷屯玻可能是因為互聯(lián)網(wǎng)火了,也可能是各家培訓(xùn)機構(gòu)為我們拉來了大量...
    活這么大就沒飽過閱讀 2,713評論 6 26
  • 四種引用類型主要是為了使得jvm的垃圾回收更加可控 強引用 如果對象存在一個強引用則不能被回收窗慎,及時報OOM 弱引...
    貧僧吃豬蹄閱讀 187評論 0 0
  • 跨年表面很平靜捉邢,一個人在床上翻著手機過的,其實那一刻內(nèi)心也是平靜的商膊,不是沒有煩惱伏伐,而是我不想去想它! ...
    lily北媽閱讀 191評論 0 1