溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中有哪些引用方式

發(fā)布時間:2021-06-30 17:34:24 來源:億速云 閱讀:126 作者:Leah 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)Java中有哪些引用方式,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

強引用>軟引用>弱引用>虛引用

1.強引用

強引用,強在哪里?強在“JVM即使內(nèi)存溢出,也不會讓GC去隨便的回收強引用對象所占用的內(nèi)存空間”。其原因也容易理解,如果GC將上述的ref回收了,那么new Object()這個對象將毫無意義,后續(xù)所有使用ref的代碼也將出錯。

強引用,什么時候會失效?只有當(dāng)強引用的值被置為 null 或作用域失效后,GC才會將強引用對象納入被回收的范圍。

2.軟引用

當(dāng)JVM的內(nèi)存足夠時,GC對待軟引用和強引用的方式是一樣,即不會主動回收軟引用對象;但當(dāng)JVM的內(nèi)存不足時,GC就會去主動回收軟引用對象。

也可以這么理解:JVM只會在拋出OutOfMemory之前回收軟引用對象。

強引用可以直接通過關(guān)鍵字new產(chǎn)生,而軟引用需要借助JDK提供的java.lang.ref.SoftReference<T>。

在軟引用、弱引用和后面要講的虛引用中都有一個get()方法(實際都是繼承父類Reference而來),此方法用于獲取引用所指向的引用對象。如下,就是通過get()方法獲取了軟引用所指向的ObjectDemo對象。

class ObjectDemo {
   public void method(){}
}

public class ReferenceDemo {
   public static void main(String[] args) throws Exception {
       SoftReference<ObjectDemo> softReference = new SoftReference<>(new ObjectDemo());
       ObjectDemo obj =  softReference.get();
  }
}

3.弱引用

弱引用在JDK中是指java.lang.ref.WeakReference<T>類。當(dāng)GC進行垃圾回收時,無論是否當(dāng)時JVM的內(nèi)存是否充足,都會去主動回收弱引用對象。

4.虛引用

虛引用在JDK中是指java.lang.ref.PhantomReference<T>類,虛引用也稱為幻影引用或幽靈引用。虛引用是所有引用級別中最低的一個,甚至于“是否使用虛引用對于一個對象本身來說都沒有任何區(qū)別”,并且我們也無法通過虛引用來獲取一個對象實例。虛引用一般會和引用隊列(ReferenceQueue)一起使用,其價值在于:當(dāng)GC在回收某個對象時,如果發(fā)現(xiàn)這個對象還存在虛引用,就會在回收此對象前先把這個虛引用存放到相應(yīng)的引用隊列中,并且在這個虛引用出隊前,不會回收對應(yīng)的虛引用對象。因此,我們可以通過分析引用隊列中虛引用的數(shù)量,來估算GC回收的頻率,或者趕在虛引用對象在被回收前進行一些額外的操作。

看完上述內(nèi)容,你們對Java中有哪些引用方式有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI