亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GC 如何將不可到達的對象標記為已經不可到達

GC 如何將不可到達的對象標記為已經不可到達

慕姐4208626 2023-09-27 16:06:45
我相信這是一個簡單的問題,但我對我的理解有一點疑問。我擔心的是,每當 GC 啟動垃圾收集時,它主要涉及三個步驟:標記掃壓實GC標記階段時,從GC根開始遍歷所有對象,對不可達對象進行標記。我已經讀過很多塊了。我的疑問是,當從 GC 根遍歷時,GC 只會訪問活動對象(在樹中被引用)。正確的!那么肯定沒有辦法到達不可到達的對象。那么 GC 如何標記不可到達的對象,因為 GC 無法到達它們。請幫助我理解這個概念。謝謝!
查看完整描述

3 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

GC 如何將不可到達的對象標記為已經不可到達

不可達的對象不會被標記。

這個想法是,標記過程訪問所有可到達的對象,并在它找到的每個對象上設置標記。然后掃描階段會清除未標記的對象。

那么GC是如何找到那些沒有被標記的對象的呢?

好吧,所有對象都有一個標頭塊,其中包括標記位和其他內容以及對象的大小。對象在內存中連續存儲。因此,如果您擁有第一個對象的地址,則只需將對象大小和標頭大小添加到該地址......并且您就擁有了下一個對象的地址。

這就是掃地機的作用。它掃描所有對象,檢查它們是否被標記。然后刪除未標記的對象。

(我簡化了很多......)


查看完整回答
反對 回復 2023-09-27
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

雖然標記階段是從根開始的圖形遍歷,但掃描階段收集器可以對內存區域執行(可并行的)線性掃描,根據已知布局(大多數 JVM 實現中的標頭、某些其他實現中的 GC 槽的固定大?。┳R別所有對象。運行時間)



查看完整回答
反對 回復 2023-09-27
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

  • 標記 - 標記從 GC 根開始的活動對象

  • Sweep - 遍歷堆以識別未標記的對象

  • 緊湊 - 移動堆中的對象以使可用內存連續(碎片對策)


查看完整回答
反對 回復 2023-09-27
  • 3 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號