Java引用類型

簡介

在Java中提供了4個級別的引用:強引用、軟引用、弱引用和虛引用。在這4個引用級別中,只有強引用類FinalReference類是包內(nèi)可見的,其他3種引用類型均為public,可以在引用程序中直接使用。


引用類型的類型結(jié)構(gòu)圖

強引用

Java中通過引用可以對堆中的對象進(jìn)行操作。在某函數(shù)中,當(dāng)創(chuàng)建了一個對象后,該對象被分配在堆中,通過這個對象的引用才能對這個對象進(jìn)行操作。

強引用特點:

  • 可以直接訪問目標(biāo)對象。
  • 所指向的對象在任何時候都不會被系統(tǒng)回收。JVM寧愿拋出OOM異常,也不會回收強引用所指向的對象。
  • 可能導(dǎo)致內(nèi)存泄漏。

軟引用

軟引用是除了強引用外最強的引用類型??梢酝ㄟ^java.lang.ref.SoftReference使用軟引用。
一個持有軟引用的對象不會被JVM很快回收,JVM會根據(jù)當(dāng)前堆的使用情況來判斷何時回收。當(dāng)堆使用頻率臨近閾值時,才會去回收軟引用的對象。只要有足夠的內(nèi)存,軟引用便可以在內(nèi)存中存活相當(dāng)長的一段時間。因此軟引用可以用于對內(nèi)存敏感的Cache.

弱引用

弱引用是一種比軟引用較弱的引用類型。在系統(tǒng)調(diào)用GC時,只要發(fā)現(xiàn)弱引用,不管形同堆空間是否足夠,都會將對象進(jìn)行回收。但是,由于垃圾回收器的線程通常優(yōu)先級很低,因此并不一定能很快發(fā)現(xiàn)弱引用的對象。在這種情況下,軟引用對象可以存在較長的時間。一旦一個弱引用對象被垃圾回收器回收,便會加入一個注冊引用隊列中。

注意

軟引用和弱引用都非常適合用來保存那些可有可無的緩存數(shù)據(jù)。如果這么做,當(dāng)系統(tǒng)內(nèi)存不足時,這些緩存數(shù)據(jù)會被回收,不會導(dǎo)致內(nèi)存溢出。但是當(dāng)內(nèi)存資源充足時,這些緩存數(shù)據(jù)又可以存在相當(dāng)長的時間,從而起到加速系統(tǒng)運行的作用。

虛引用

虛引用是所有引用類型中最弱的一個。一個持有虛引用的對象和沒有引用幾乎是一樣的,它隨時都可能被垃圾回收器回收。當(dāng)試圖通過引用的get()方法取得強引用時,總是會失敗,并且虛引用必須和引用隊列一起使用,其作用在于跟蹤垃圾回收過程。
當(dāng)垃圾回收器準(zhǔn)備回收一個對象時,如果發(fā)現(xiàn)它還有虛引用,就會在垃圾回收后銷毀這個對象時將這個虛引用加入引用隊列。

WeakHashMap

?著作權(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)容

  • 一、值類型與引用類型 1、變量初始化 2、變量賦值 從上圖可以顯而易見,num是int基本類型變量,值就直接保存在...
    轝巐閱讀 426評論 0 1
  • Java引用概述 StrongReference(強引用) 不存在這個類 默認(rèn)實現(xiàn) Java.lang.ref提供...
    Gxgeek閱讀 562評論 0 2
  • 來源:朱小廝 鏈接:http://blog.csdn.net/u013256816/article/details...
    會點代碼的大叔閱讀 423評論 0 1
  • 強引用 ( Strong Reference ) 強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器絕...
    tomas家的小撥浪鼓閱讀 3,130評論 1 4
  • 強引用,軟引用,弱引用,虛引用.不同的引用類型主要體現(xiàn)在GC上 強引用:如果一個對象具有強引用,它就不會被垃圾回收...
    南土醬閱讀 178評論 0 0

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