java,reference
<link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b2fbfaddf.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b38b8bad702ecfe21037ca964.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><style>pre{overflow-x: auto}</style>
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
Java reference是什麼?讓我們一起來了解一下吧!
Java Reference是java中的引用類,它的作用是用來給普通對象進行包裝,從而在JVM在GC時,按照引用類型的不同,在回收時採用不同的邏輯。java主要有4種引用方式。它們分別是強引用strongReference、軟引用SoftReference、弱引用WeakReference和虛引用PhantomReference。
softreference引用示例:
ReferenceQueue referenceQueue = new ReferenceQueue<>(); SoftReference softReference = new SoftReference<>("abc", referenceQueue); System.gc(); System.out.println(softReference.get()); Reference reference = referenceQueue.poll(); System.out.println(reference);
PhantomReference引用示例:
public class PhantomReferenceTest { public static void main(String[] args) { ReferenceQueue rq = new ReferenceQueue<>(); PhantomReference reference = new PhantomReference<>(new String("cord"), rq); System.out.println(reference.get()); System.gc(); System.runFinalization(); System.out.println(rq.poll() == reference); }}
WeakReference引用示例:
public class WeakReferenceTest { public static void main(String[] args) { ReferenceQueue rq = new ReferenceQueue<>(); //這裏必須用new String構建字符串,而不能直接傳入字面常量字符串 Reference r = new WeakReference<>(new String("java"), rq); Reference rf; //一次System.gc()並不一定會回收A,所以要多試幾次 while((rf=rq.poll()) == null) { System.gc(); } System.out.println(rf); if (rf != null) { //引用指向的對象已經被回收,存入引入隊列的是弱引用本身,所以這裏最終返回null System.out.println(rf.get()); } }}
下面是Reference中的幾個關鍵屬性:
//關聯的對象的引用,根據引用類型不同gc針對性處理 private T referent; //引用註冊的隊列,如果有註冊隊列則回收引用會加入該隊列 volatile ReferenceQueue queue; //上面引用隊列referenceQueue中保存引用的鏈表 /* active: NULL //未加入隊列前next指向null * pending: this * Enqueued: next reference in queue (or this if last) * Inactive: this */ Reference next; /* When active: 由gc管理的引用發現鏈表的下一個引用 * pending: pending鏈表中的下一個元素 * otherwise: NULL */ transient private Reference discovered; /* used by VM */ /* *等待入隊列的引用鏈表,gc往該鏈表加引用對象,Reference-handler線程消費該鏈表。 * 它通過discovered連接它的元素 */ private static Reference pending = null;
-
淘寶上買的東西地址填錯了怎麼辦
當我們在淘寶購物選好自己想買的東西后下單時需要爲商家提供地址,雖然說現在都有之前填寫過的收貨地址基本上只需要自己選擇一下就可以,但是有時自己難免大意將地址選錯,那麼選錯了地址以後應該怎麼辦呢?郵遞前:當發現自己地址填錯後,儘快的聯繫一下賣家,可以取消訂單...
-
蘋果5打電話怎麼錄音
1、首先在AppleStore商城直接搜索Wetalkpro下載安裝到手機裏。2、然後打開Wetalkpro,撥打對方的手機號碼。3、通話時只要點擊一下里面的紅色錄音按鈕就可以進行錄音,把對話記錄下來。4、通話錄音的記錄在歷史與錄音裏面可以查看到了。5、特別提示:因爲這款軟件使...
-
無邊框頭像怎麼製作,無邊框頭像的製作方法
1、首先在手機中下載一個摳圖工具,比如小編用的是“摳圖神手”,在各大APP應用市場都可以搜索找到,然後下載安裝即可。2、然後打開摳圖工具,然後從手機相冊中,導入一張需要摳圖的頭像圖片(爲了方便摳圖,建議儘量選擇背景單一的頭像圖片)。3、導入頭像進來之後,首先點擊“...
-
手機殼髒了該怎麼清洗
1、硅膠手機殼的清洗方法。先找一個乾的布並放在水裏清洗一下,撈出來之後再擰乾,放在陽臺上曬曬,等曬得差不多了我們就可以用它仔仔細細地把手機殼清洗一次。如果發現你的手機殼上有污點的話,或者是灰塵,都可以用小牙刷沾上一點牙膏來清洗。如果你的手機殼上有膠水...