JVM的三色標記

什么是三色標記

三色標記是指垃圾收集器在進行可達性分析時,用白、黑、灰來標記對象狀態(tài)的一種機制。其中白色表示該對象還沒有被標記過;灰色表示這個對象被垃圾收集器訪問過,但是對象內(nèi)部的引用還沒有完全被掃描過;黑色表示這個對象以及這個對象內(nèi)部的引用都被掃描過。掃描結(jié)束后狀態(tài)還是白色的對象便是要被清理的對象。

三色標記的缺點

并發(fā)環(huán)境下會出現(xiàn)多標和漏標問題,多標就是已經(jīng)將某個對象標記為灰色但是用戶線程又放棄了該對象。漏標是在掃描后某個黑色對象又引用了白色對象,導致了漏標發(fā)生。

如何解決漏標問題:增量更新或者原始快照

增量更新:記錄掃描時在黑色對象中重新插入白色對象的情況,掃描后再將這些黑色對象作為根節(jié)點重新掃描
原始快照:當灰色對象要刪除白色引用關(guān)系時,要將這些情況記錄下來,本次掃描后再進行一次掃描標記

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

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