创建一个当前collection的top快照,然后筛除掉那些我们不想扫描的card mark
增加一个dirty_region
1.判断该入参region已经dirty,就直接return
2.如果不是,就利用底层的cmpxchg指令,来把这个region标记为dirty
3.标记region为dirty成功后,就分配对应的空间大小 allocated,然后把入参region放进去
清除卡表中的dirty region
1.判断如果不存在dirty region,就直接return
2.计算出块数量,和活跃worker数量
3.迭代dirty card region列表
4.调用workers来执行清理task
更新rememberSet
1.先对HCC的日志entries,应用闭包
2.然后对所有剩余的日志entries,应用闭包
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
核心方法,并发refine card
1.校验当前是gc 活跃的
2.构造能够代表card的region指针
3.根据找到的指针获取到HeapRegion,获取不到就直接返回
4.判断如果card 从来就不是脏的,直接return返回
5.校验这个HeapRegion,必须是old 或者humongous,或者压缩的
1.如果当前card没有执行中,就把card指针设置为脏card的值
2.然后把card_ptr 添加到dirtyCardQueue 队列中
3.如果当前card已经是执行中,那么累加refined_cards 数量