站長資訊網
        最全最豐富的資訊網站

        Java引用類型包括哪些?

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

        Java引用類型包括哪些?

        Java的引用類型

        Java類型一般有兩種,即基本數據類型與引用數據類型。其中,引用數據類型在存儲堆中對需要引用的對象進行引用,引用是Java面向對象的一個特點。

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

        ①強引用(StrongReference)

        ②軟引用(SoftRefernce)

        ③弱引用(WeakReference)

        ④虛引用(PhantomReference)

        強引用-StrongReference

        這種引用是平時開發中最常用的,例如Stringstrong=newString("StrongReference"),當一個實例對象具有強引用時,垃圾回收器不會回收該對象,當內存不足時,寧愿拋出OutOfMemeryError異常也不會通過回收強引用的對象,因為JVM認為強引用的對象是用戶正在使用的對象,它無法分辨出到底該回收哪個,強行回收有可能導致系統嚴重錯誤。

        軟引用-SoftReference

        如果一個對象只有軟引用,那么只有當內存不足時,JVM才會去回收該對象,其他情況不會回收。軟引用可以結合ReferenceQueue來使用,當由于系統內存不足,導致軟引用的對象被回收了,JVM會把這個軟引用加入到與之相關聯的ReferenceQueue中。

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

        當系統內存不足時,觸發gc,這個Book就會被回收,reference將不為null。

        弱引用-WeakReference

        只有弱引用的對象,當JVM觸發gc時,就會回收該對象。與軟引用不同的是,不管是否內存不足,弱引用都會被回收。弱引用可以結合ReferenceQueue來使用,當由于系統觸發gc,導致軟引用的對象被回收了,JVM會把這個弱引用加入到與之相關聯的ReferenceQueue中,不過由于垃圾收集器線程的優先級很低,所以弱引用不一定會被很快回收。下面通過一個主動觸發gc的例子來驗證此結論。

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

        當然這不是每次都能復現,因為我們調用System.gc()只是告訴JVM該回收垃圾了,但是它什么時候做還是不一定的,但就我測試來看,只要多寫幾次System.gc(),復現的概率還是很高的。

        虛引用-PhantomReference

        如果一個對象只有虛引用在引用它,垃圾回收器是可以在任意時候對其進行回收的,虛引用主要用來跟蹤對象被垃圾回收器回收的活動,當被回收時,JVM會把這個弱引用加入到與之相關聯的ReferenceQueue中。

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

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

        推薦教程:《java教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 嫩草影院久久国产精品| 色偷偷88欧美精品久久久| 国语自产精品视频在线观看| 国产精品熟女高潮视频| 日韩精品电影一区亚洲| 99免费精品国产| 国产成人精品久久一区二区三区| 亚洲国产精品嫩草影院久久| 国产偷国产偷高清精品| 欧美精品亚洲精品日韩专区va| 亚洲av永久无码精品秋霞电影影院 | 久久99久久99精品免视看动漫| 国内精品久久人妻互换| 日批日出水久久亚洲精品tv| 国产精品欧美久久久久无广告 | 精品无人区无码乱码毛片国产 | 国产精品无码久久久久久| 亚洲午夜精品久久久久久浪潮| 国内精品久久久久久麻豆 | 欧美黑人巨大精品| 国产精品v欧美精品v日韩精品 | 久久免费99精品国产自在现线| 国产成人精品久久| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 91精品全国免费观看青青| 久久久久亚洲精品无码蜜桃| 中文字幕在线亚洲精品| 亚洲国产精品国产自在在线| 亚洲国产精品狼友中文久久久| 久久久精品无码专区不卡| 久久精品?ⅴ无码中文字幕| 精品99久久aaa一级毛片| 精品一区二区三区色花堂| 久久99精品国产麻豆婷婷| 精品午夜福利1000在线观看| 青娱乐国产精品视频| 亚洲精品NV久久久久久久久久| 日本精品久久久久影院日本| 亚洲国产成人a精品不卡在线| 亚洲综合欧美精品一区二区| 亚洲精品无码久久久久去q|