what:
邏輯上將老年代的內存分成大小一致的卡片(card,一般128個字節),每個用1個標記位來記錄,將所有的卡片收集到一起來管理,就構成了表格(mark table)。
當改寫引用,是從老年代到新生代的,那么對應card在table中的標記就變為1,即該卡就是dirty card。該過程可以在witer bariier中操作。
why:
CMS在做YGC時,為了標記活的對象,除了需要從GC root查找外,還需要找老年代中引用的新生代對象。在找老年代中引用的新生代對象的過程中,如果老年大很大,就會很耗時。卡表的出現就是為了提高性能,采用空間換時間的方式完成的。架構如下: