java四種引用類型

java中得四種引用

Java中有四種引用類型:強引用、軟引用、弱引用、虛引用

  • 強引用
    我們代碼中常寫,如: Object() obj = new Object();
    強引用對象永遠不會被JVM回收,即使最終OOM,可手動中斷,將其致為null,對象則被回收,可通過重寫finalize方法驗證,實際開發(fā)中,一定不要重寫finalize方法
  • 軟引用
    創(chuàng)建一個軟引用
    SoftReference<Demo> demoSoftReference = new SoftReference<Demo>(new Demo());
    軟引用通過SoftReference進行申明,通過泛型將對象包裹,當我們需要從軟引用對象獲取泛型對象時,通過get進行獲取。
    Demo demo = demoSoftReference .get();
    為什么會有軟引用呢?
    我們先從它得特點談一談,程序在運行內存不足時,會觸發(fā)JVM得GC操作,如果GC過后,內存依舊不足,怎么辦呢?此時JVM就會把軟引用中得對象kill掉(內存不足,JVM才會回收此類對象,內存足夠得情況下,手動GC也不會進行該對象的回收操作),發(fā)揮你的想象,是不是想到了什么有趣得場景(項目內部緩存)呢!
  • 弱引用
    弱引用的使用和軟引用類似,關鍵字變成了WeakReference
    WeakReference<Demo> weakReference = new WeakReference<Demo>(new Demo());
    特點是不管內存是否足夠,只要發(fā)生GC,就會被回收,如果想了解相關用法可看一下ThreadLocal的源碼
  • 虛引用
ReferenceQueue queue = new ReferenceQueue();
PhantomReference<Demo> reference = new PhantomReference<Demo>(new Demo(), queue);

當發(fā)生GC操作,GC準備回收某個對象時,如果發(fā)現該對象有虛引用,就會在回收前,把這個虛引用加入到與之關聯的ReferenceQueue中,通過ReferenceQueue獲取進行其他操作
無法通過虛引用來獲取一個對象的真實引用(直接返回null),可見PhantomReference的get方法:

public T get() {        
  return null;
}

關于操作用法可關注下NIO,使用虛引用管理堆外內存

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

友情鏈接更多精彩內容