CMS的三色標記


whate:

  三色標記法,是把內存中的對象,標記為3種顏色,分布是:黑、灰、白。

  黑:表示該對象已經掃描到,並且它可觸達的對象也已經掃描到;

  灰:表示該對象已經掃描到,但是它能觸發的對象至少還有一個沒有掃描到;

  白:表示該節點沒有被掃描到;

 

where:

  CMS的三色標記發生並發標記和重新標記階段。三色標記開始時,把所有老年代的對象標記為白色,標記從GCROOT中的對象開始;

 

why:

  1、確保並發清理階段安全,不會因為用戶線程的運行,從而導致回收器回收了還需要使用的對象。

    原因:到並發清理階段時,老年代對象只有“黑色和白色”兩種。其中,白色對象是不會沒有灰色對象,而被引用到的。

  2、確保並發清理階段,用戶新產生對象的安全。

    原因:CMS采用的標記清理算法,老年代的內存不是規整的,使用過的內存空間與未使用的內存空間相互交錯,虛擬機維護了一張內存表來管理,記錄那些內存塊是可用的。使用時從內存表中找一塊足夠大的空間分配給對象使用,並更新內存表的記錄。這種方式就是“空閑列表”。與之相對的就是“指針碰撞”。

    在並發清理時,老年代對象應該只會存在3個地方,分別是:白色對象集、黑色對象集、空閑列表。那么新生成的對象就會從“空閑列表”中分配(沒有被標記上顏色),其中的垃圾只能下次回收了。所以在本次回收過程中是安全的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM