馬老師互聯(lián)網(wǎng)三高項(xiàng)目解決方案 馬老師億級(jí)流量多級(jí)緩存專題課程(2022版)
16.GC如何判斷對(duì)象可以被回收
在 Java 中,垃圾收集器(Garbage Collector)主要通過(guò)兩種方式來(lái)判斷對(duì)象是否可以被回收:
1.引用計(jì)數(shù)法:每個(gè)對(duì)象有一個(gè)引用計(jì)數(shù)器,當(dāng)有一個(gè)新的引用指向這個(gè)對(duì)象時(shí),計(jì)數(shù)器加 1,當(dāng)引用失效時(shí),計(jì)數(shù)器減 1。當(dāng)計(jì)數(shù)器的值為 0 時(shí),說(shuō)明該對(duì)象不再被引用,可以被回收。但是,這種方式無(wú)法解決循環(huán)引用的問(wèn)題,即 A 對(duì)象引用了 B 對(duì)象,B 對(duì)象也引用了 A 對(duì)象,導(dǎo)致計(jì)數(shù)器始終不為 0,無(wú)法回收這些對(duì)象。
2.可達(dá)性分析法:這是目前主流的垃圾收集算法。該算法的基本思想是,通過(guò)一系列稱為 GC Roots 的根對(duì)象作為起點(diǎn),遍歷整個(gè)對(duì)象圖,將所有與 GC Roots 不可達(dá)的對(duì)象標(biāo)記為不可用對(duì)象,最后回收這些不可用對(duì)象。在 Java 中,GC Roots 主要包括以下幾種:
..虛擬機(jī)棧(棧幀中的本地變量表)中引用的對(duì)象。
標(biāo)簽: