3 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個贊
GC 如何將不可到達(dá)的對象標(biāo)記為已經(jīng)不可到達(dá)
不可達(dá)的對象不會被標(biāo)記。
這個想法是,標(biāo)記過程訪問所有可到達(dá)的對象,并在它找到的每個對象上設(shè)置標(biāo)記。然后掃描階段會清除未標(biāo)記的對象。
那么GC是如何找到那些沒有被標(biāo)記的對象的呢?
好吧,所有對象都有一個標(biāo)頭塊,其中包括標(biāo)記位和其他內(nèi)容以及對象的大小。對象在內(nèi)存中連續(xù)存儲。因此,如果您擁有第一個對象的地址,則只需將對象大小和標(biāo)頭大小添加到該地址......并且您就擁有了下一個對象的地址。
這就是掃地機(jī)的作用。它掃描所有對象,檢查它們是否被標(biāo)記。然后刪除未標(biāo)記的對象。
(我簡化了很多......)

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊
雖然標(biāo)記階段是從根開始的圖形遍歷,但掃描階段收集器可以對內(nèi)存區(qū)域執(zhí)行(可并行的)線性掃描,根據(jù)已知布局(大多數(shù) JVM 實(shí)現(xiàn)中的標(biāo)頭、某些其他實(shí)現(xiàn)中的 GC 槽的固定大小)識別所有對象。運(yùn)行時間)

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個贊
標(biāo)記 - 標(biāo)記從 GC 根開始的活動對象
Sweep - 遍歷堆以識別未標(biāo)記的對象
緊湊 - 移動堆中的對象以使可用內(nèi)存連續(xù)(碎片對策)
添加回答
舉報