首頁> Java> java教程> 主體

Java四種引用類型的具體介紹

黄舟
發布: 2017-03-18 13:56:51
原創
2010 人瀏覽過

紙上得來終覺淺,絕知此事要躬行 --陸遊問渠那得清如許,為有源頭活水來 --朱熹

Java從1.2版本開始引入了4種引用,這四種引用的等級由高到低依序為:強引用>軟引用>弱引用>虛引用

一、強引用(StrongReference):

強引用是使用最普遍的引用,一般我們將物件初始化之後就是一個強引用。當一個物件具有強烈引用時,JVM不會對它進行垃圾回收。當記憶體不足時,寧願拋出OutofMemoryError,讓程式異常終止,也不會回收強引用。

二、軟引用(SoftReference):

如果一個物件是弱引用,如果記憶體足夠就不會對它進行垃圾回收;如果記憶體空間不足了,就會回收這部分物件。只要垃圾回收器沒有對它進行回收,那麼程式就可以使用它。軟引用可用於實現記憶體敏感的高速緩存。軟引用可以和一個引用隊列(ReferenceQueue)結合使用,如果軟引用所引用的物件被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。

三、弱引用(WeakReference):

# 弱引用和軟引用的差異在於弱引用擁有更短的生命週期。當垃圾回收器掃描記憶體區域時,只要發現弱引用就會對它進行回收。但由於垃圾回收器是優先順序比較低的線程,因此不一定很快就會發現那些弱引用物件。弱引用可以和一個引用隊列(ReferenceQueue)結合使用,如果弱引用所引用的物件被垃圾回收,Java虛擬機器就會把這個弱引用加入到與之關聯的引用隊列中。

四、虛引用(PhantomReference):

與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件只持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。虛引用主要用來追蹤物件被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用隊列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之 關聯的引用佇列中。

範例程式碼:

強引用:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); System.gc(); } }
登入後複製

明確的呼叫了垃圾回收,但由於myClass是強引用,myClass沒有被回收。

軟體引用:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); SoftReference ref=new SoftReference(myClass); System.gc(); } }
登入後複製

記憶體不足時軟引用被回收。

弱引用:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); WeakReference ref=new WeakReference(myClass); System.gc(); } }
登入後複製

當JVM垃圾回收時,弱引用就會被回收。

虛引用:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); ReferenceQueue rq=new ReferenceQueue(); PhantomReference pr=new PhantomReference(myClass,rq); System.gc(); } }
登入後複製

虛引用,被實例化之後就會被回收。

總結:

什麼時候被垃圾回收 使用 生存時間

#等級

##強引用

從來不會

物件的一般狀態
JVM停止執行階段終止

#軟體引用

在記憶體不足時############物件簡單?快取############記憶體不足時終止#####################弱引用########## #####在垃圾回收時############物件快取###

gc運行後終止

#虛引用

Unknown

Unknown

#Unknown

相關文章:

詳細比較Java中的基本類型變數和引用類型變數

#解析java中的引用類型的概念

JavaScript 基本資料型別與引用型別的差異詳解

以上是Java四種引用類型的具體介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!