強(qiáng)軟弱虛引用如何理解

  1. 強(qiáng)引用:
    我們平時(shí)最常使用的基本對(duì)象引用,JVM不會(huì)回收強(qiáng)引用類型對(duì)象,即使內(nèi)存不足導(dǎo)致OOM也不會(huì)回收。

實(shí)現(xiàn)一個(gè)強(qiáng)引用

User user = new User()
  1. 軟引用:
    內(nèi)存空間足夠的情況下,JVM不會(huì)回收軟引用對(duì)象,如果內(nèi)存空間不足,那么軟引用對(duì)象會(huì)被回收。
    只要JVM沒(méi)有回收,軟引用就可以繼續(xù)被程序使用,因此可以用軟引用存放一些內(nèi)存敏感的緩存。只要內(nèi)存足夠,對(duì)象就保持永遠(yuǎn)不被回收。

實(shí)現(xiàn)軟引用:java.lang.ref.SoftReference

SoftRenference softRenfernce = new SoftRenference(new User());
// 獲取軟引用對(duì)象
System.out.println(softReference.get())
  1. 弱引用:垃圾回收線程只要掃描到弱引用對(duì)象,不管內(nèi)存空間是否足夠,都會(huì)進(jìn)行回收。
    弱引用可以用來(lái)實(shí)現(xiàn)一些規(guī)范化映射,如:WeakHashMap,當(dāng)key或者value不再被引用時(shí)可以自動(dòng)回收。

實(shí)現(xiàn)一個(gè)弱引用:java.lang.ref.WeakReference

WeakReference  weakReference = new WeakReference(new User());
System.out.println(weakReference.get())
  1. 虛引用:虛引用不決定對(duì)象的生命周期,如果一個(gè)對(duì)象僅持有虛引用,那么他就和沒(méi)有任何引用一樣,任何時(shí)候都可以被JVM回收。
    虛引用主要用來(lái)跟蹤對(duì)象被垃圾回收器回收的話,虛引用必須和引用隊(duì)列(ReferenceQuque)聯(lián)合使用,當(dāng)垃圾回收器準(zhǔn)備回收一個(gè)對(duì)象時(shí),如果發(fā)現(xiàn)他還有虛引用,就會(huì)在回收對(duì)象的內(nèi)存之前,把這個(gè)虛引用加入到與之前關(guān)聯(lián)的引用隊(duì)列。

實(shí)現(xiàn)一個(gè)虛引用:java.lang.ref.ReferenceQueue

// 引用隊(duì)列
ReferenceQueue<User> queue = new ReferenceQueue<> ();
// 構(gòu)建虛引用對(duì)象
PhantomReference phantomReference = new PhantomReference(new User());
// 獲取虛引用對(duì)象
System.out.println(phantomReference .get())

ReferenceQueue(引用隊(duì)列)是必須的,當(dāng)對(duì)象回收時(shí)會(huì)放入其中,它最大的作用是跟中對(duì)象的回收。

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

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

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