最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Java 強軟弱虛引用

2022-03-10 20:16 作者:房頂上的鋁皮水塔  | 我要投稿

本文參考內(nèi)容:

  1. ?參考內(nèi)容

  2. https://www.51cto.com/article/686209.html

本文分成以下幾個部分:

  1. 介紹強軟弱虛四種引用

  2. 為什么在ThreadLocal中使用的是WeakReference

  3. ThreadLocal中出現(xiàn)的內(nèi)存泄露的問題

強引用

強引用不用多說,我們主要寫的代碼都是強引用:

句柄a放在虛擬機棧上,new創(chuàng)建出來的A放在堆中。設(shè)置a = null就會使得在堆中的A沒有被引用到,這樣就會被gc。

軟引用

軟引用會在內(nèi)存不足時被釋放:

設(shè)置內(nèi)存為20M,輸出為:

當創(chuàng)建第二個內(nèi)存為10M的byte數(shù)組時,內(nèi)存不夠,就會回收軟引用。

弱引用

弱引用會在gc的時候直接被釋放,不管有無空閑的內(nèi)存:

第二個輸出為空

虛引用

通過虛引用的get方法只能返回null,而且虛引用必須要和Reference隊列聯(lián)合使用。它主要是實現(xiàn)一個對象回收的監(jiān)聽過程。

ThreadLocal部分源碼分析

ThreadLocal是基于一個類似于Map的結(jié)構(gòu)實現(xiàn)的保證線程數(shù)據(jù)的獨立性:

ThreadLocalMap是基于Entry的結(jié)構(gòu):

Entry是一個WeakReference,同時在Entry的構(gòu)造方法中也將ThreadLocal套了一層弱引用。

所以在棧區(qū),tl句柄強引用指向?qū)χ氐腡hreadLocal,同時棧區(qū)的Key也通過弱引用的方式指向Threadlocal。這樣我們不想使用ThreadLocal時,tl= null,然后gc就可以清除掉ThreadLocal。但是此時,Value對象還有強引用指向,所以Value對象可能會造成泄漏,只能等到線程結(jié)束。

總而言之,如果所示:


Java 強軟弱虛引用的評論 (共 條)

分享到微博請遵守國家法律
汉中市| 丰镇市| 苏尼特左旗| 马龙县| 梁河县| 水城县| 土默特左旗| 噶尔县| 金溪县| 南丰县| 西和县| 东台市| 黄龙县| 普兰县| 安阳县| 丹棱县| 五台县| 双牌县| 崇仁县| 弋阳县| 恭城| 壶关县| 无锡市| 乌拉特后旗| 略阳县| 星座| 攀枝花市| 建昌县| 彭阳县| 漯河市| 涟水县| 乌兰察布市| 宣城市| 木里| 扬中市| 凉山| 呼和浩特市| 榆社县| 军事| 华池县| 曲阳县|