新聞中心
java對象的引用reference分為有強(qiáng)引用,軟引用,弱引用,虛引用這幾種形式。

十多年的駐馬店網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整駐馬店建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“駐馬店網(wǎng)站設(shè)計(jì)”,“駐馬店網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
1、Soft Reference(軟引用)
指到的對象,即使沒有任何Direct Reference,也不會清除,一直到j(luò)vm內(nèi)存不足且沒有Direct Reference時(shí)候才會清除。
應(yīng)用場景:常用來設(shè)計(jì)緩存,不但可以將對象緩存起來,也不會容易造成內(nèi)存不足。
2、Weak Reference(弱引用)
GC一旦發(fā)現(xiàn)了弱引用關(guān)系進(jìn)行就開始收集對象。
應(yīng)用場景:想查看某些對象信息,又不想影響GC對其的收集工作。
與GC的交互:
1.將referent置為null引用;
2.將堆中的目標(biāo)對象設(shè)置為“finalizable(可結(jié)束的)”;
3.先執(zhí)行finalize(),釋放內(nèi)存,軟引用添加到RefernceQueue中。
ReferenceQueue在 soft renference和 weak reference中可以為null,但虛應(yīng)用中必須有!
3、PhantomReference(虛引用)
與GC的交互:
1.不將referent置為null引用;而是將堆中的目標(biāo)對象設(shè)置為“finalizable(可結(jié)束的)”;
2.先軟引用添加到RefernceQueue中。然后收集對象,釋放內(nèi)存
附注:ReferenceQueue在 soft renference和 weak reference中可以為null,但虛引用中必須有!
4、抽象類Reference分析
java.lang.ref包中有四個(gè)類,他們的關(guān)系是PhantomReference,WeakReference,SoftReference繼承了抽象類Reference。Reference類中,有thread子類(ReferenceHandler),并在靜態(tài)區(qū)域中開啟,對pending字段進(jìn)行實(shí)時(shí)的監(jiān)控。
pending是由jvm來賦值的,當(dāng)Reference內(nèi)部的referent對象的可達(dá)狀態(tài)改變時(shí),jvm會將Reference對象放入pending鏈表。
一旦relevent= null,垃圾收集時(shí)會標(biāo)記WeakReference的referent為不可達(dá)get()返回null,并且通過賦值給pending ,觸發(fā)ReferenceHandler線程處理pending。
ReferenceHandler線程要做的是將pending對象enqueue,但默認(rèn)我們所提供的queue,也就是從構(gòu)造函數(shù)傳入的是null,實(shí)際是使用了ReferenceQueue.NULL,Handler線程判斷queue為ReferenceQueue.NULL則不進(jìn)行操作,只有非ReferenceQueue.NULL 的queue才會將Reference進(jìn)行enqueue。
希望通過以上內(nèi)容的介紹,能夠給你帶來幫助。
網(wǎng)站名稱:分析java對象的幾種引用(reference)
當(dāng)前地址:http://fisionsoft.com.cn/article/djhooei.html


咨詢
建站咨詢
