Java gcroot

在Java語言中,GC Root主要包括以下幾類元素:

1、虛擬機(jī)棧中引用的對(duì)象
比如:各個(gè)線程被調(diào)用的方法中使用到的參數(shù)、局部變量等。

2、本地方法棧內(nèi)JNI(通常說的本地方法)引用的對(duì)象

3、方法區(qū)中類靜態(tài)屬性引用的對(duì)象
比如:Java類的引用類型靜態(tài)變量

4、方法區(qū)中常量引用的對(duì)象
比如:字符串常量池(string Table) 里的引用

5、所有被同步鎖synchronized持有的對(duì)象

6、Java虛擬機(jī)內(nèi)部的引用。
基本數(shù)據(jù)類型對(duì)應(yīng)的Class對(duì)象,一些常駐的異常對(duì)象(如:
NullPointerException、OutOfMemoryError) ,系統(tǒng)類加載器。

7、反映java虛擬機(jī)內(nèi)部情況的JMXBean、JVMTI中注冊(cè)的回調(diào)、本地代碼緩存等

8、除了這些固定的GCRoots集合以外,根據(jù)用戶所選用的垃圾收集器以及當(dāng)前回收的內(nèi)存區(qū)域不同,還可以有其他對(duì)象“臨時(shí)性”地加入,共同構(gòu)成完整GC Roots集合。比如:分代收集和局部回收(Partial GC)。
如果只針對(duì)Java堆中的某一塊區(qū)域進(jìn)行垃圾回收(比如:典型的只針對(duì)新生代),必須考慮到內(nèi)存區(qū)域是虛擬機(jī)自己的實(shí)現(xiàn)細(xì)節(jié),更不是孤立封閉的,這個(gè)區(qū)域的對(duì)象完全有可能被其他區(qū)域的對(duì)象所引用,這時(shí)候就需要一并將關(guān)聯(lián)的區(qū)域?qū)ο笠布尤隚C Roots集
合中去考慮,才能保證可達(dá)性分析的準(zhǔn)確性。

參考:
https://www.cnblogs.com/KeleLLXin/p/14061269.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容