Java之強引用、軟引用、弱引用、虛引用

強引用

強引用是我們開發(fā)過程中最常見的,例如:

// new方法返回的都是強引用
Object object = new Object();

只要引用存在,強引用對應(yīng)的對象永遠都不會被回收,即便堆內(nèi)存不足,拋出Java.lang.OutOfMemoryError。

軟引用

// 可通過以下代碼創(chuàng)建軟引用,softReference就是一個Object對象的軟引用
SoftReference<Object> softReference = new SoftReference<>(new Object());
// 可通過get方法獲取Object對象,當對象被標記為需要回收時,則返回null
Object object = softReference.get();

軟引用對應(yīng)的對象在內(nèi)存不足時,是可以被JVM回收的,即便軟引用存在。

弱引用

// 通過以下代碼創(chuàng)建弱引用
WeakReference<Object> weakReference = new WeakReference<>(new Object());
// 通過get方法獲取Object對象,有時為null
Object object = weakReference.get();
// 返回該對象是否被標記為即將回收的對象
weakReference.isEnqueued();

弱引用對應(yīng)的對象在第二次垃圾回收時回收,即弱引用對應(yīng)的對象最多存活2個垃圾回收周期。

虛引用

// 通過以下代碼創(chuàng)建虛引用
PhantomReference<Object> phantomReference = new PhantomReference<>(new Object(), null);
// 永遠返回null,因此虛引用也被稱為幽靈引用
phantomReference.get();
// 返回該對象是否已被回收
phantomReference.isEnqueued();

虛引用對應(yīng)的對象每次垃圾回收時都會被回收。主要用于檢測對象是否已被回收。


結(jié)束語

將對象的引用分為這4種級別,是為了程序可以更好的控制對象的生命周期。
這4種引用級別對應(yīng)對象的生命周期長短為:
強引用 > 軟引用 > 弱引用 > 虛引用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容