Java引用隊(duì)列和虛引用實(shí)例分析
本文實(shí)例講述了Java引用隊(duì)列和虛引用。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
引用隊(duì)列由ReferenceQueue類表示,它用于保存被回收后對象的引用。當(dāng)聯(lián)合使用軟引用、弱引用和引用隊(duì)列時,系統(tǒng)在回收被引用的對象之后,將把它所回收對象對應(yīng)的引用添加到關(guān)聯(lián)的引用隊(duì)列中。而虛引用在對象被釋放之前,將把它對應(yīng)的虛引用添加到它關(guān)聯(lián)的引用隊(duì)列中,這使得可以在對象被回收之前采取行動。
虛引用無法獲取它所對應(yīng)的對象。
二 實(shí)戰(zhàn)
1 代碼
import java.lang.ref.*; public class PhantomReferenceTest { public static void main(String[] args) throws Exception { // 創(chuàng)建一個字符串對象 String str = new String("瘋狂Java講義"); // 創(chuàng)建一個引用隊(duì)列 ReferenceQueue rq = new ReferenceQueue(); // 創(chuàng)建一個虛引用,讓此虛引用引用到"瘋狂Java講義"字符串 PhantomReference pr = new PhantomReference (str , rq); // 切斷str引用和"瘋狂Java講義"字符串之間的引用 str = null; // 取出虛引用所引用的對象,并不能通過虛引用獲取被引用的對象,所以此處輸出null System.out.println(pr.get()); //① // 強(qiáng)制垃圾回收 System.gc(); System.runFinalization(); // 垃圾回收之后,虛引用將被放入引用隊(duì)列中 // 取出引用隊(duì)列中最先進(jìn)入隊(duì)列中的引用與pr進(jìn)行比較 System.out.println(rq.poll() == pr); //② } }
2 運(yùn)行
null
true
3 說明
使用引用類可以避免在程序執(zhí)行期間將對象留在內(nèi)存中。如果以軟引用、弱引用或虛引用的方法引用對象,垃圾回收器就能夠隨意釋放對象。如果希望盡可能減小程序在其生命周期中所占用的內(nèi)存大小,這些引用類很有好處。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作
這篇文章主要介紹了tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Java HashMap實(shí)現(xiàn)原理分析(一)
這篇文章主要介紹了Java HashMap實(shí)現(xiàn)原理的分析,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-08-08Spring Boot項(xiàng)目中定制PropertyEditors方法
在本篇文章里小編給大家分享的是一篇關(guān)于Spring Boot定制PropertyEditors的知識點(diǎn)內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-11-11