作者:coldwellmcnealey_242 | 来源:互联网 | 2023-08-29 12:33
why:并发标记标记阶段,应用线程是在run的,就会是并发标记的结果不准,漏垃圾还好,主要是把一下需要使用的对象清理了。 where:如下图: 并发标记线程在扫描完A后。应用线程将
why:
并发标记标记阶段,应用线程是在run的,就会是并发标记的结果不准,漏垃圾还好,主要是把一下需要使用的对象清理了。
where:
如下图:
并发标记线程在扫描完A后。应用线程将C的引用关系,经过b转换到了c。这时由于A已经扫描(三色扫描)完毕了,不会再扫描标记A,那么C对象就会最终标记为白色(垃圾),实际C是有用的。
how:
引入write bariier,write bariier在改写引用时,会额外的判断赋值对象是否被扫描标记过没有。如果没有,就把它压入标记栈中。引入write bariier的操作后,内存图就如下面: