什么是三色標記
三色標記是指垃圾收集器在進行可達性分析時,用白、黑、灰來標記對象狀態(tài)的一種機制。其中白色表示該對象還沒有被標記過;灰色表示這個對象被垃圾收集器訪問過,但是對象內(nèi)部的引用還沒有完全被掃描過;黑色表示這個對象以及這個對象內(nèi)部的引用都被掃描過。掃描結(jié)束后狀態(tài)還是白色的對象便是要被清理的對象。
三色標記的缺點
并發(fā)環(huán)境下會出現(xiàn)多標和漏標問題,多標就是已經(jīng)將某個對象標記為灰色但是用戶線程又放棄了該對象。漏標是在掃描后某個黑色對象又引用了白色對象,導致了漏標發(fā)生。
如何解決漏標問題:增量更新或者原始快照
增量更新:記錄掃描時在黑色對象中重新插入白色對象的情況,掃描后再將這些黑色對象作為根節(jié)點重新掃描
原始快照:當灰色對象要刪除白色引用關(guān)系時,要將這些情況記錄下來,本次掃描后再進行一次掃描標記