java弱引用_軟引用_虛引用的講解.doc

java弱引用_軟引用_虛引用的講解.doc

ID:57688517

大?。?6.00 KB

頁數(shù):2頁

時(shí)間:2020-09-01

java弱引用_軟引用_虛引用的講解.doc_第1頁
java弱引用_軟引用_虛引用的講解.doc_第2頁
資源描述:

《java弱引用_軟引用_虛引用的講解.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、關(guān)于java中的引用(WeakReference,SoftReference,PhantomReference)分析2007/11/1609:10前兩天看db4o,看到關(guān)于db4o的對(duì)象緩存中的對(duì)象是weakreference(弱引用),這樣對(duì)于用戶查詢出來的大量對(duì)象結(jié)果,db4o使用弱引用,這樣當(dāng)垃圾回收時(shí)可以自己判斷并進(jìn)行垃圾回收。對(duì)于weakreference不是很了解,查點(diǎn)資料,整理一下。對(duì)于實(shí)現(xiàn)了自動(dòng)垃圾回收的面向?qū)ο笳Z言,都會(huì)有關(guān)于reference的一些實(shí)現(xiàn),如java中在java.lang.ref中有下面幾個(gè)類:Reference???Soft

2、Reference???WeakReference??PhantomReference?ReferenceQueue?表明了幾種引用關(guān)系。而這種引用關(guān)系和垃圾回收緊密相關(guān)??梢钥纯磈dk中api文檔中對(duì)這幾個(gè)類的解釋也會(huì)有一個(gè)比較清晰的認(rèn)識(shí)。1.SoftReference,軟引用對(duì)象,在響應(yīng)內(nèi)存需要時(shí),由垃圾回收器決定是否清除此對(duì)象。軟引用對(duì)象最常用于實(shí)現(xiàn)內(nèi)存敏感的緩存。?假定垃圾回收器確定在某一時(shí)間點(diǎn)某個(gè)對(duì)象是軟可到達(dá)對(duì)象。這時(shí),它可以選擇自動(dòng)清除針對(duì)該對(duì)象的所有軟引用,以及通過強(qiáng)引用鏈,從其可以到達(dá)該對(duì)象的針對(duì)任何其他軟可到達(dá)對(duì)象的所有軟引用。在同一時(shí)間或

3、晚些時(shí)候,它會(huì)將那些已經(jīng)向引用隊(duì)列注冊(cè)的新清除的軟引用加入隊(duì)列。?軟可到達(dá)對(duì)象的所有軟引用都要保證在虛擬機(jī)拋出OutOfMemoryError之前已經(jīng)被清除。否則,清除軟引用的時(shí)間或者清除不同對(duì)象的一組此類引用的順序?qū)⒉皇苋魏渭s束。然而,虛擬機(jī)實(shí)現(xiàn)不鼓勵(lì)清除最近訪問或使用過的軟引用。?此類的直接實(shí)例可用于實(shí)現(xiàn)簡單緩存;該類或其派生的子類還可用于更大型的數(shù)據(jù)結(jié)構(gòu),以實(shí)現(xiàn)更復(fù)雜的緩存。只要軟引用的指示對(duì)象是強(qiáng)可到達(dá)對(duì)象,即正在實(shí)際使用的對(duì)象,就不會(huì)清除軟引用。例如,通過保持最近使用的項(xiàng)的強(qiáng)指示對(duì)象,并由垃圾回收器決定是否放棄剩余的項(xiàng),復(fù)雜的緩存可以防止放棄最近使用

4、的項(xiàng)。一般來說,weakReference我們用來防止內(nèi)存泄漏,保證內(nèi)存對(duì)象被VM回收。2.WeakReference,弱引用對(duì)象,它們并不禁止其指示對(duì)象變得可終結(jié),并被終結(jié),然后被回收。弱引用最常用于實(shí)現(xiàn)規(guī)范化的映射。?假定垃圾回收器確定在某一時(shí)間點(diǎn)上某個(gè)對(duì)象是弱可到達(dá)對(duì)象。這時(shí),它將自動(dòng)清除針對(duì)此對(duì)象的所有弱引用,以及通過強(qiáng)引用鏈和軟引用,可以從其到達(dá)該對(duì)象的針對(duì)任何其他弱可到達(dá)對(duì)象的所有弱引用。同時(shí)它將聲明所有以前的弱可到達(dá)對(duì)象為可終結(jié)的。在同一時(shí)間或晚些時(shí)候,它將那些已經(jīng)向引用隊(duì)列注冊(cè)的新清除的弱引用加入隊(duì)列。softReference多用作來實(shí)現(xiàn)ca

5、che機(jī)制,保證cache的有效性。3.PhantomReference,虛引用對(duì)象,在回收器確定其指示對(duì)象可另外回收之后,被加入隊(duì)列。虛引用最常見的用法是以某種可能比使用Java終結(jié)機(jī)制更靈活的方式來指派pre-mortem清除操作。如果垃圾回收器確定在某一特定時(shí)間點(diǎn)上虛引用的指示對(duì)象是虛可到達(dá)對(duì)象,那么在那時(shí)或者在以后的某一時(shí)間,它會(huì)將該引用加入隊(duì)列。?為了確保可回收的對(duì)象仍然保持原狀,虛引用的指示對(duì)象不能被檢索:虛引用的get方法總是返回null。?與軟引用和弱引用不同,虛引用在加入隊(duì)列時(shí)并沒有通過垃圾回收器自動(dòng)清除。通過虛引用可到達(dá)的對(duì)象將仍然保持原狀

6、,直到所有這類引用都被清除,或者它們都變得不可到達(dá)。下面貼一些我寫的例子:ReferenceAndGCExample.java:publicclassReferenceAndGCExample{publicstaticvoidmain(String[]args){??//TODOAuto-generatedmethodstub??YDateProxyob=newYDateProxy();??ob.testObj();??System.gc();??ob.testObj();}}YDateProxy.java:importjava.lang.ref.WeakRe

7、ference;importjava.util.Date;publicclassYDateProxy{WeakReferencewr;publicYDateProxy(){??wr=newWeakReference(newYDate());}publicvoidtestObj(){??if(wr.get()==null)???System.out.println("obj已經(jīng)被清除了");??else???System.out.println("obj尚未被清除,其信息是"+wr.get().toString());}classYDateextendsDate

8、{??publicvoidfinali

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。