下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、i 分鐘理解java中的弱引用-編程開發(fā)技術(shù)十分鐘理解java中的弱引用原文出處:absfree (簡卩作者)本篇文章嘗試從what. why、how這三個角度來探索jawai中的弱引用,幫助大家 理解jqvq中弱引用的定義、基木使用場景和使用方法。由于個人水平有限,敘 述屮難免存在不準(zhǔn)確或是不清晰的地方,希望大家可以指出,謝謝大家:)1. what什么是弱引用?java中的弱引用具體指的是java. lang. ref. weakreference<t>類,我們首先來 看一下官方文檔對它做的說明:弱引用對彖的存在不會阻止它所指向的對彖被垃圾回收器回收。弱 引用最常見的用途是實(shí)現(xiàn)規(guī)
2、范映射(canonicalizing mappings,比 如哈希表)。假設(shè)垃圾收集器在某個時間點(diǎn)決定一個對象是弱可達(dá)的(weakly reachable)(也就是說當(dāng)前指向它的全都是弱引用),這時垃圾收 集器會清除所冇指向該對彖的弱引用,然后把這個弱可達(dá)對彖標(biāo)記 為可終結(jié)(finalizable)的,這樣它隨后就會被冋收。與此同時或 稍后,垃圾收集器會把那些剛清除的弱引用放入創(chuàng)建弱引用對象吋 所指定的引用隊(duì)列(reference queue)中。實(shí)際上,java 11存在四種引用,它們由強(qiáng)到弱依次是:強(qiáng)引用、軟引用、弱引 用、虛引用。下面我們簡單介紹下除弱引用外的其他三種引用: 強(qiáng)引用(st
3、rong reference):通常我們通過new來創(chuàng)建一個新對象時返i叫的引用就是 一個強(qiáng)引用,若一個對象通過一系列強(qiáng)引用可到達(dá),它就是強(qiáng)可達(dá)的(strongly reachable),那么它就不被回收 軟引用(soft reference):軟引用和弱引用的區(qū)別在于,若一個對象是弱引用可達(dá), 無論當(dāng)前內(nèi)存是否充足它都會被冋收,而軟引用可達(dá)的對象在內(nèi)存不充足吋才會被 回收,因此軟引用要比弱引用“強(qiáng)''一些虛引用(phantom reference):虛引用是java中授弱的引用,那么它弱到什么程度 呢?它是如此脆弱以至于我們通過虛引用其至無法獲取到被引用的對象,虛引用存 在的
4、唯一作用就是當(dāng)它指向的對象被回收后,虛引用本身會被加入到引用隊(duì)列中, 用作記錄它指向的對象已被回收??紤]卜面的場景:現(xiàn)在有一個product類代表一種產(chǎn)品,這個類被設(shè)計(jì)為不可擴(kuò) 展的,而此時我們想要為每個產(chǎn)品增加一個編號。一種解決方案是使用 hashmap<product, integer。于是問題來了,如果我們已經(jīng)不再需要一個 product對象存在于內(nèi)存屮(比如已經(jīng)賣出了這件產(chǎn)品),假設(shè)指向它的引用為 producta,我們這時會給producta賦值為nul 1,然而這時producta過去指向 的product對象并不會被回收,因?yàn)樗@然還被llashmap引用著。所以這種情況
5、下,我們想要真正的回收一個product對象,僅僅把它的強(qiáng)引用賦值為null是 不夠的,還要把相應(yīng)的條目從hashmap中移除。顯然“從hashmap中移除不再需 要的條口”這個工作我們不想自己完成,我們希望告訴垃圾收集器:在只有 hashmap中的key在引用著product對象的情況下,就口j以回收相應(yīng)product對 象了。顯然,根據(jù)前面弱引用的定義,使用弱引用能幫助我們達(dá)成這個目的。我 們只需耍用一個指向product對彖的弱引用對象來作為hashmap屮的key就可以 tohow如何使用弱引用?拿上面介紹的場景舉例,我們使用一個指向product對象的弱引用對象來作為 hashmap
6、的key,只需這樣定義這個弱引用對象:product producta = new product();weakreferenceproduct> weakproducta 二 new weakreference>(producta);現(xiàn)在,若引用對象weakproducta就指向了 product對象productao那么我們怎 么通過weakproduct獲取它所指向的product對彖producta呢?很簡單,只需 要下面這句代碼:product product = weakproducta. get();實(shí)際上,對于這種情況,java類庫為我們提供了 weakhashma
7、p類,使用和這個 類,它的鍵自然就是弱引用對象,無需我們再手動包裝原始對象。這樣一來,當(dāng) producta變?yōu)閚ull時(表明它所引用的product已經(jīng)無需存在于內(nèi)存中),這 時指向這個product對彖的就是由弱引用對彖weakproducta 了,那么顯然這時 候相應(yīng)的product對象時弱可達(dá)的,所以指向它的弱引用會被清除,這個product 對象隨即會被回收,指向它的弱引用對象會進(jìn)入引用隊(duì)列屮。引用隊(duì)列下而我們來簡單地介紹下引用隊(duì)列的概念。實(shí)際上,weakreference類冇兩個構(gòu) 造函數(shù):創(chuàng)建一個指向給定對象的弱引用weakreference(t referent)創(chuàng)建一個指向給定對象并且登記到給定引用隊(duì)列的弱引用weakreference (t referent, referencequeue<? super t> q) 我們可以看到第二個構(gòu)造方法中提供了一個referencequeue類型的參數(shù),通過 提供這個參數(shù),我們便把創(chuàng)建的弱引用對象注冊到了一個引用隊(duì)列上,這樣當(dāng)它 被垃圾冋收器清
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年場民法典技術(shù)合同合同法務(wù)顧問合同4篇
- 2025年度智能穿戴設(shè)備售后維修與保養(yǎng)合同范本4篇
- 上海辦公室裝修合作合同一
- 2025年度土地征收與補(bǔ)償測繪服務(wù)合同范文4篇
- 二手車交易協(xié)議樣式(2024版)版B版
- 2025年度咖啡廳租賃合同77069(含咖啡文化體驗(yàn))4篇
- 2025年度智能產(chǎn)品全球分銷渠道拓展合同協(xié)議書4篇
- 2025年度汽車零部件銷售合同范本(二零二五版)4篇
- 2025年度智慧社區(qū)市場調(diào)研服務(wù)合同書4篇
- 專業(yè)駕駛員商業(yè)秘密保護(hù)協(xié)議(2024版)一
- 物理學(xué)家伽利略課件
- 小學(xué)語文閱讀校本課程設(shè)計(jì)方案
- 山東省濟(jì)南市2024-2025學(xué)年高一英語上學(xué)期學(xué)情檢測期末試題
- 車險理賠全解析
- Unit10l'mten!(練)新概念英語青少版StarterA
- 產(chǎn)業(yè)園區(qū)開發(fā)全流程實(shí)操解析
- NBT 47013.4-2015 承壓設(shè)備無損檢測 第4部分:磁粉檢測
- 羽毛球比賽對陣表模板
- 2024年上海市中考數(shù)學(xué)真題試卷及答案解析
- 2024年全國卷1高考理綜試題及答案
- 初中語文現(xiàn)代文閱讀訓(xùn)練及答案二十篇
評論
0/150
提交評論