站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        Java引用類型包括哪些?

        在Java中,引用類型包括有:1、強(qiáng)引用(StrongReference);2、軟引用(SoftRefernce);3、弱引用(WeakReference);4、虛引用(PhantomReference)。

        Java引用類型包括哪些?

        Java的引用類型

        Java類型一般有兩種,即基本數(shù)據(jù)類型與引用數(shù)據(jù)類型。其中,引用數(shù)據(jù)類型在存儲(chǔ)堆中對(duì)需要引用的對(duì)象進(jìn)行引用,引用是Java面向?qū)ο蟮囊粋€(gè)特點(diǎn)。

        從JDK1.2開始,Java中的引用類型分為四種,分別是:

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

        ②軟引用(SoftRefernce)

        ③弱引用(WeakReference)

        ④虛引用(PhantomReference)

        強(qiáng)引用-StrongReference

        這種引用是平時(shí)開發(fā)中最常用的,例如Stringstrong=newString("StrongReference"),當(dāng)一個(gè)實(shí)例對(duì)象具有強(qiáng)引用時(shí),垃圾回收器不會(huì)回收該對(duì)象,當(dāng)內(nèi)存不足時(shí),寧愿拋出OutOfMemeryError異常也不會(huì)通過回收強(qiáng)引用的對(duì)象,因?yàn)镴VM認(rèn)為強(qiáng)引用的對(duì)象是用戶正在使用的對(duì)象,它無法分辨出到底該回收哪個(gè),強(qiáng)行回收有可能導(dǎo)致系統(tǒng)嚴(yán)重錯(cuò)誤。

        軟引用-SoftReference

        如果一個(gè)對(duì)象只有軟引用,那么只有當(dāng)內(nèi)存不足時(shí),JVM才會(huì)去回收該對(duì)象,其他情況不會(huì)回收。軟引用可以結(jié)合ReferenceQueue來使用,當(dāng)由于系統(tǒng)內(nèi)存不足,導(dǎo)致軟引用的對(duì)象被回收了,JVM會(huì)把這個(gè)軟引用加入到與之相關(guān)聯(lián)的ReferenceQueue中。

        ReferenceQueuereferenceQueue=newReferenceQueue(); SoftReference<Book>softReference=newSoftReference<>(newBook(),referenceQueue); Bookbook=softReference.get(); Referencereference=referenceQueue.poll();

        當(dāng)系統(tǒng)內(nèi)存不足時(shí),觸發(fā)gc,這個(gè)Book就會(huì)被回收,reference將不為null。

        弱引用-WeakReference

        只有弱引用的對(duì)象,當(dāng)JVM觸發(fā)gc時(shí),就會(huì)回收該對(duì)象。與軟引用不同的是,不管是否內(nèi)存不足,弱引用都會(huì)被回收。弱引用可以結(jié)合ReferenceQueue來使用,當(dāng)由于系統(tǒng)觸發(fā)gc,導(dǎo)致軟引用的對(duì)象被回收了,JVM會(huì)把這個(gè)弱引用加入到與之相關(guān)聯(lián)的ReferenceQueue中,不過由于垃圾收集器線程的優(yōu)先級(jí)很低,所以弱引用不一定會(huì)被很快回收。下面通過一個(gè)主動(dòng)觸發(fā)gc的例子來驗(yàn)證此結(jié)論。

        ReferenceQueuereferenceQueue=newReferenceQueue(); WeakReference<Book>weakReference=newWeakReference(newBook(),referenceQueue); Bookbook=softReference.get(); System.gc(); //Runtime.getRuntime().gc(); Referencereference=referenceQueue.poll();

        當(dāng)然這不是每次都能復(fù)現(xiàn),因?yàn)槲覀冋{(diào)用System.gc()只是告訴JVM該回收垃圾了,但是它什么時(shí)候做還是不一定的,但就我測(cè)試來看,只要多寫幾次System.gc(),復(fù)現(xiàn)的概率還是很高的。

        虛引用-PhantomReference

        如果一個(gè)對(duì)象只有虛引用在引用它,垃圾回收器是可以在任意時(shí)候?qū)ζ溥M(jìn)行回收的,虛引用主要用來跟蹤對(duì)象被垃圾回收器回收的活動(dòng),當(dāng)被回收時(shí),JVM會(huì)把這個(gè)弱引用加入到與之相關(guān)聯(lián)的ReferenceQueue中。

        與軟引用和弱引用不同的是,虛引用必須有一個(gè)與之關(guān)聯(lián)的ReferenceQueue,通過phantomReference.get()得到的值為null,試想一下,如果沒有ReferenceQueue與之關(guān)聯(lián)還有什么存在的價(jià)值呢?

        PhantomReference<Book>phantomReference=newPhantomReference<>(newBook(),referenceQueue); Bookbook=phantomReference.get();//此值為null Referencereference=referenceQueue.poll();

        推薦教程:《java教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国精品午夜福利视频不卡| 久久久精品久久久久久| 国产精品亚洲精品观看不卡| 日韩视频中文字幕精品偷拍| 最新国产の精品合集| 精品人妻va出轨中文字幕| 亚洲国产成人精品女人久久久 | 久久精品午夜一区二区福利| 精品乱子伦一区二区三区| 999精品色在线播放| 国产成人精品高清在线观看99| 日韩精品无码久久久久久| 亚洲精品无码成人片在线观看 | 亚洲av永久无码精品秋霞电影影院| 精品久久久久久无码免费| 99热这里只有精品6国产免费| 国产欧美国产精品第一区| 成人区精品一区二区不卡| 欧美午夜精品久久久久免费视| 尤物国精品午夜福利视频| 亚洲精品动漫免费二区| 日韩视频中文字幕精品偷拍| 香港aa三级久久三级老师2021国产三级精品三级在 | 国产AV国片精品有毛| 久久国产精品99精品国产| 亚洲一区无码精品色| 亚洲AV成人精品日韩一区18p | 久久国产精品偷99| 久久精品国产精品亚洲| 精品成人一区二区三区四区| 国产精品国产三级国产AⅤ| 国产精品高清2021在线| 国产精品人人做人人爽人人添| 91精品国产91久久久久久青草| 91精品国产色综久久| 成人午夜精品久久久久久久小说 | 亚洲精品国产自在久久| 中国精品18videosex性中国| 亚洲韩国精品无码一区二区三区 | 午夜DY888国产精品影院| 久久精品国产亚洲av麻豆小说|