golang的gc流程,会stw吗,三色不变和混合写屏障

题目来源: 百度, 知乎,跟谁学

答案:

三色标记垃圾收集器的工作原理

  1. 从灰色对象的集合中选择一个灰色对象并将其标记成黑色;
  2. 将黑色对象指向的所有对象都标记成灰色,保证该对象和被该对象引用的对象都不会被回收;
  3. 重复上述两个步骤直到对象图中不存在灰色对象;

当三色的标记清除的标记阶段结束之后,应用程序的堆中就不存在任何的灰色对象,我们只能看到黑色的存活对象以及白色的垃圾对象,垃圾收集器可以回收这些白色的垃圾,

三色标记清除算法本身是不可以并发或者增量执行的,它仍然需要 STW