日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java引用类型有哪些

發布時間:2024/4/15 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java引用类型有哪些 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

動力節點Java培訓最新上線Java實驗班,等你來測試自己適不適合學習Java編程哦!

?

Java類型一般有兩種,即基本數據類型與引用數據類型。其中,引用數據類型在存儲堆中對需要引用的對象進行引用,引用是Java面向對象的一個特點,在Java入門中,我們會接觸到四種Java的引用類型,接下來就說說這四種Java引用類型有哪些吧:

?

?

1、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引用类型有哪些的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。