今天就跟大家聊聊有關Java中有哪些引用方式,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
強引用>軟引用>弱引用>虛引用
1.強引用
強引用,強在哪里?強在“JVM即使內存溢出,也不會讓GC去隨便的回收強引用對象所占用的內存空間”。其原因也容易理解,如果GC將上述的ref回收了,那么new Object()這個對象將毫無意義,后續所有使用ref的代碼也將出錯。
強引用,什么時候會失效?只有當強引用的值被置為 null 或作用域失效后,GC才會將強引用對象納入被回收的范圍。
2.軟引用
當JVM的內存足夠時,GC對待軟引用和強引用的方式是一樣,即不會主動回收軟引用對象;但當JVM的內存不足時,GC就會去主動回收軟引用對象。
也可以這么理解:JVM只會在拋出OutOfMemory之前回收軟引用對象。
強引用可以直接通過關鍵字new產生,而軟引用需要借助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>類。當GC進行垃圾回收時,無論是否當時JVM的內存是否充足,都會去主動回收弱引用對象。
4.虛引用
看完上述內容,你們對Java中有哪些引用方式有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。