CMS的卡表

what:

  逻辑上将老年代的内存分成大小一致的卡片(card,一般128个字节),每个用1个标记位来记录,将所有的卡片收集到一起来管理,就构成了表格(mark table)。

  当改写引用,是从老年代到新生代的,那么对应card在table中的标记就变为1,即该卡就是dirty card。该过程可以在witer bariier中操作。

why:

  CMS在做YGC时,为了标记活的对象,除了需要从GC root查找外,还需要找老年代中引用的新生代对象。在找老年代中引用的新生代对象的过程中,如果老年大很大,就会很耗时。卡表的出现就是为了提高性能,采用空间换时间的方式完成的。架构如下:

  

原文地址:https://www.cnblogs.com/juniorMa/p/15692514.html