CMS并发标记出现引用变化的场景

why:

  并发标记标记阶段,应用线程是在run的,就会是并发标记的结果不准,漏垃圾还好,主要是把一下需要使用的对象清理了。

 

where:

  如下图:

 

  并发标记线程在扫描完A后。应用线程将C的引用关系,经过b转换到了c。这时由于A已经扫描(三色扫描)完毕了,不会再扫描标记A,那么C对象就会最终标记为白色(垃圾),实际C是有用的。

 

how:

  引入write bariier,write bariier在改写引用时,会额外的判断赋值对象是否被扫描标记过没有。如果没有,就把它压入标记栈中。引入write bariier的操作后,内存图就如下面:

 

posted @ 2021-10-20 17:23  修心而结网  阅读(139)  评论(0编辑  收藏  举报