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

        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號
        主站蜘蛛池模板: 欧美日韩精品乱国产538| 成人精品一区二区久久久| 国产精品久线在线观看| 精品国产乱码久久久久久浪潮| 大伊香蕉精品一区视频在线| 久久乐国产精品亚洲综合| 国产亚洲精品一品区99热| 亚洲AV无码久久精品成人| 久久精品成人免费国产片小草| 久久青青草原精品影院| 99精品国产在热久久无毒不卡| 一本一道精品欧美中文字幕| 精品午夜国产人人福利| 亚洲国产精品免费视频| 国产精品成人观看视频国产| 亚洲人成精品久久久久| 久久精品国产亚洲Aⅴ香蕉| 亚洲无删减国产精品一区| 精品无码人妻夜人多侵犯18| 亚洲精品久久久www| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛| 久久精品aⅴ无码中文字字幕不卡| 色婷婷久久久SWAG精品| 白浆都出来了视频国产精品| 国产福利视精品永久免费| 无码aⅴ精品一区二区三区浪潮| 精品一区二区无码AV| 日韩精品在线一区二区| 国产麻豆一精品一AV一免费| 中文字幕精品一区二区三区视频| 精品无码综合一区| 成人亚洲日韩精品免费视频| 国产成人精品精品欧美| 久久久久99精品成人片直播| 亚洲欧美日韩国产成人精品影院| 精品久久久久久无码人妻热| 99免费精品国产| 影音先锋国产精品国语对白| 国产92成人精品视频免费| 精品日韩亚洲AV无码| 奇米精品视频一区二区三区|