內存管理機制-Java中的引用類型

RoadMap

 

 

引用(Reference)

        Java中沒有指針,處處都是引用(除了基本類型)。因此,固然,你確定知道java的引用,並用了好久,可是是否是對此瞭解地比較全面?而這些引用有什麼做用,且有什麼不一樣呢?
        Java中有個java.lang.ref包,這裏面都是描述引用對象的,包括了Reference,SoftReference,WeakReference和PhantomReference。其中,Reference是基類其餘三個類的基類。下面就這幾種引用對象作個說明。java

 

強引用 Final Reference

代碼中通常的等號使用就是所謂的強引用。 
強引用具備如下特色:緩存

  1. 強引用能夠直接訪問對象微信

  2. 強引用所指向的對象在任什麼時候候都不會被系統回收。JVM寧願拋出OOM異常,也不會回收掉強引用所指向的異常atom

  3. 不恰當的使用強引用可能致使內存泄露。spa

 
  1. Test obj = new Obj(); // 聲明強引用線程

  2. Test obj = null; // 清除強引用指針

軟引用 Soft Reference

軟引用是除強引用之外 第二強的引用,能夠經過java.lang.ref.SoftReference使用軟引用。一個持有軟引用的對象,不會被JVM很快回收,JVM會根據當前堆的使用狀況來判斷什麼時候回收。 當堆使用頻率臨近閥值時(一般狀況下默認爲內存的80%),纔會去回收軟引用的對象。 只要有足夠的內存,軟引用即可能在內存中存活至關長一段時間。所以,軟引用能夠用於實現對內存敏感的Cache 。code

 
  1. Test obj = new Obj();  //聲明強引用對象

  2. ReferenceQueue softQueue = new ReferenceQueue<Test>();  //建立引用隊列生命週期

  3. SoftReference<Test> softRef = new SoftReference<Test>(obj,softQueue);//包裝引用隊列爲軟引用

  4. obj = null; //清除強引用

弱引用 Weak Reference

弱引用是一種比軟引用較弱的引用類型。在系統GC時,只要發現弱引用,無論系統堆的空間是否夠用,都會將對象進行回收。通常來講,垃圾回收器的線程優先級較低,不多會碰到持有弱引用的對象,這時弱引用對象存在較長的時間。一旦一個弱引用對象被垃圾回收器回收,便會加入到一個註冊引用隊列中。

 
  1. Test obj = new Obj(); //聲明強引用

  2. ReferenceQueue  softQueue = new ReferenceQueue<Test>(); //建立引用隊列

  3. WeakReference <Test> softRef = new WeakReference<Test>(obj,softQueue); //建立弱引用

  4. obj = null; //清除強引用

    軟引用和弱引用都很是適合來保存哪些無關緊要的緩存數據。若是這麼作,當系統內存不足時,這些緩存數據會被回收,不會致使內存溢出。而當內存資源充足時,這些緩存數據又能夠存在至關長的時間,從而起到加速系統的做用。

虛引用 Phatom Reference

虛引用」顧名思義,就是形同虛設,與其餘幾種引用都不一樣,虛引用並不會決定對象的生命週期。若是一個對象僅持有虛引用,那麼它就和沒有任何引用同樣,在任什麼時候候均可能被垃圾回收器回收。 
虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用隊列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個對象時,若是發現它還有虛引用,就會在回收對象的內存以前,把這個虛引用加入到與之 關聯的引用隊列中。

 
  1. Test obj = new Obj(); //聲明強引用

  2. ReferenceQueue queue = new ReferenceQueue<Test>(); //建立引用隊列

  3. PhantomReference<Test> prRef = new PhantomReference<Test> (object, queue); //建立虛引用

  4. obj = null; //清除強引用

    程序能夠經過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。若是程序發現某個虛引用已經被加入到引用隊列,那麼就能夠在所引用的對象的內存被回收以前採起必要的行動。

 

歡迎關注微信公衆號

相關文章
相關標籤/搜索