一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java reference的種類及使用場景

 騰飛工作室 2014-02-16

Java 中一共有 4 種類型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference (傳說中的幽靈引用). 4 種類型的引用與 GC 有著密切的關(guān)系讓我們逐一來看它們的定義和使用場景 :  

1. Strong Reference

   StrongReference  Java 的默認(rèn)引用實(shí)現(xiàn) 它會盡可能長時(shí)間的存活于 JVM 內(nèi), 當(dāng)沒有任何對象指向它時(shí) GC 執(zhí)行后將會被回收  

2.WeakReference

 WeakReference, 顧名思義 是一個(gè)弱引用 當(dāng)所引用的對象在 JVM 內(nèi)不再有強(qiáng)引用時(shí), GC  weak reference 將會被自動回收  

3.SoftReference 

   SoftReference  WeakReference 的特性基本一致, 最大的區(qū)別在于 SoftReference 會盡可能長的保留引用直到 JVM 內(nèi)存不足時(shí)才會被回收(虛擬機(jī)保證), 這一特性使得 SoftReference 非常適合緩存應(yīng)用  

4.PhantomReference

   Phantom Reference(幽靈引用)  WeakReference  SoftReference 有很大的不同 因?yàn)樗?/span> get() 方法永遠(yuǎn)返回 null, 這也正是它名字的由來

   PhantomReference 唯一的用處就是跟蹤 referent  何時(shí)被 enqueue  ReferenceQueue .  

   PhantomReference  有兩個(gè)好處:

   其一, 它可以讓我們準(zhǔn)確地知道對象何時(shí)被從內(nèi)存中刪除, 這個(gè)特性可以被用于一些特殊的需求中(例如 Distributed GC,  XWork  google-guice 中也使用 PhantomReference 做了一些清理性工作).  

   其二, 它可以避免 finalization 帶來的一些根本性問題, 上文提到 PhantomReference 的唯一作用就是跟蹤 referent 何時(shí)被 enqueue  ReferenceQueue  但是 WeakReference 也有對應(yīng)的功能, 兩者的區(qū)別到底在哪呢 ?

   這就要說到 Object  finalize 方法, 此方法將在 gc 執(zhí)行前被調(diào)用, 如果某個(gè)對象重載了 finalize 方法并故意在方法內(nèi)創(chuàng)建本身的強(qiáng)引用 這將導(dǎo)致這一輪的 GC 無法回收這個(gè)對象并有可能

引起任意次 GC, 最后的結(jié)果就是明明 JVM 內(nèi)有很多 Garbage  OutOfMemory, 使用 PhantomReference 就可以避免這個(gè)問題, 因?yàn)?/span> PhantomReference 是在 finalize 方法執(zhí)行后回收的,也就意味著此時(shí)已經(jīng)不可能拿到原來的引用 也就不會出現(xiàn)上述問題 當(dāng)然這是一個(gè)很極端的例子, 一般不會出現(xiàn).  

  

 

Soft vs Weak vs Phantom References(taken from http:///jgloss/phantom.html)

 

Type

Purpose

Use

When GCed

Implementing Class

Strong Reference

An ordinary reference. Keeps objects alive as long as they are referenced.

normal reference.

Any object not pointed to can be reclaimed.

default

Soft Reference

Keeps objects alive provided there’s enough memory.

to keep objects alive even after clients have removed their references (memory-sensitive caches), in case clients start asking for them again by key.

After a first gc pass, the JVM decides it still needs to reclaim more space.

java.lang.ref.SoftReference

Weak Reference

Keeps objects alive only while they’re in use (reachable) by clients.

Containers that automatically delete objects no longer in use.

After gc determines the object is only weakly reachable

java.lang.ref.WeakReference 

java.util.WeakHashMap

Phantom Reference

Lets you clean up after finalization but before the space is reclaimed (replaces or augments the use offinalize())

Special clean up processing

After finalization.

java.lang.ref.PhantomReference

 

 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    中文字幕人妻一区二区免费| 中文字幕亚洲精品在线播放| 欧洲亚洲精品自拍偷拍| 福利一区二区视频在线| 欧美性欧美一区二区三区| 日韩中文高清在线专区| 久久精品视频就在久久| 国产在线观看不卡一区二区| 不卡中文字幕在线免费看| 日本少妇三级三级三级| 日韩成人免费性生活视频| 粉嫩国产一区二区三区在线| 激情内射日本一区二区三区| 国产亚洲精品一二三区| 日韩av欧美中文字幕| 激情爱爱一区二区三区| 精品久久综合日本欧美| 日韩高清中文字幕亚洲| 欧洲日本亚洲一区二区| 日韩国产亚洲欧美激情| 精品亚洲一区二区三区w竹菊| 日韩精品在线观看一区| 亚洲国产av在线视频| 午夜日韩在线观看视频| 亚洲av日韩av高潮无打码| 欧美日韩乱码一区二区三区| 欧美一区二区黑人在线| 日韩欧美国产三级在线观看| 精品熟女少妇av免费久久野外| 欧美成人免费一级特黄| 中国一区二区三区人妻| 亚洲中文字幕高清乱码毛片| 亚洲中文字幕日韩在线| 欧美一二三区高清不卡| 欧美日韩在线视频一区| 大香蕉网国产在线观看av| 热情的邻居在线中文字幕| 五月综合婷婷在线伊人| 91午夜少妇极品福利| 福利专区 久久精品午夜| 麻豆果冻传媒一二三区|