JAVA引用類型分析

 

1、引用對象類型定義

    首先,引用對象在Java定義中有三種類型,從弱到強依次爲:軟引用、弱引用與虛引用,三種級別也各有所不一樣(軟引用>弱引用)。本文淺析下軟引用與弱引用。大概的解釋,軟引用適合應用在須要cache的場景,通常面向實現內存敏感的緩存;弱引用則是適用在某些場景爲了沒法防止被回收的規範性映射,它優先級最低,通常與引用隊列聯合使用。算法

詳細介紹:
(一)強引用(默認存在)
    強引用,是在實際開發中最爲廣泛的引用。有時候你開發的時候,申請一個內存空間的時候,就已是強引用了。例如:緩存

Object obj =new Object();  // 強引用

    在強引用中,若是不讓該對象指向爲空,垃圾回收器絕對不會回收它。除非當出現內存空間不足的時候。jvm拋出oom致使程序異常種植的時候,纔會回收具備強引用的對象來解決內存空間不足問題。安全

Object obj =new Object();  // 強引用
   obj = null;//這時候爲垃圾回收器回收這個對象,至於何時回收,取決於垃圾回收器的算法

(二)軟引用(SoftReference )
    軟引用對象也比較好理解,它是一個比較特殊的存在,擁有強引用的屬性,又更加安全。若是有一個對象具備軟引用。在內存空間足夠的狀況下,除非內存空間接近臨界值、jvm即將拋出oom的時候,垃圾回收器纔會將該引用對象進行回收,避免了系統內存溢出的狀況。(前提也是對象指向不爲空)所以,SoftReference 引用對象很是適合實現內存敏感的緩存,例如加載圖片的時候,bitmap緩存機制。jvm

String value = new String(「sy」);
SoftReference sfRefer = new SoftReference (value );

sfRefer .get();//能夠得到引用對象值

(三)弱引用(WeakReference)
    顧名思義,一個具備弱引用的對象,與軟引用對比來講,前者的生命週期更短。當垃圾回收器掃描到弱引用的對象的時候,無論內存空間是否足夠,都會直接被垃圾回收器回收。不過也不用特別擔憂,垃圾回收器是一個優先級比較低的現場,所以不必定很快能夠發現弱引用的對象。
   另外,google官方是推薦Android開發者使用WeakReference,而不建議SoftReference 引用,Android環境下與純Java有所略同。下面待會說明狀況。google

String value = new String(「sy」);
WeakReference weakRefer = new WeakReference(value );

System.gc();

weakRefer.get();//null



參考文獻:https://www.jianshu.com/p/b56731447179spa

相關文章
相關標籤/搜索