golang gc

题目来源: 字节跳动,深信服,米哈游

答案1:

  1. 对【40. go的GC(标记清理 -> 三色标记发 -> 混合写屏障)】补充:
    Q: 那如果用户在并发CMS期间改了引用,写屏障如何保证三色不变性:
    A: 插入屏障和删除屏障共同保证
    插入写屏障:对象A引用C,A黑C白,会把C加入写屏障buf,最终flush到扫描队列。
    删除屏障:被删除的对象,如果自身为灰色或者白色,那么被标记为灰色。(保护灰色到白色的路径不会断)。
    插⼊写屏障和删除写屏障的短板:
    插⼊写屏障:结束时需要STW来重新扫描栈,标记栈上引⽤的⽩⾊对象的存活;
    删除写屏障:回收精度低,GC开始时STW扫描堆栈来记录初始快照,这个过程会保护开始时刻的所有存活对象。