知识卡片
并发标记引入不稳定
内容
并发标记让 GC 与用户代码同时运行,用户代码可能修改已扫描区域,因此需要额外机制维护正确性。发散:低停顿 GC 的复杂度来自“边跑边标”的一致性问题。具体应对方案见[[三色标记分对象状态]]。
参考来源
- 位置:《Go语言入门到实战(共3册)》第42章《Go语言学习笔记:第17章 垃圾回收》(源文件:_epub-src/text/part0105.html)
- 结论依据:原文围绕“并发标记和用户代码同时执行”给出定义、机制、流程、对比或限制条件,本卡片据此提炼可迁移的语言/工程结论,并补充了边界或实践启发。
- 原始内容:件头部有GC的详细说明,只有个别地方和源码有些出入,但不影响对算法和过程的理解。 与之前版本在STW状态下完成标记不同,并发标记和用户代码同时执行让一切都处于不稳定状态。用户代码随时可能修改已经被扫描过的区域,在标记过程中还会不断分配新对象,这让垃圾回收变得很麻烦。 究竟什么时候启动垃圾回收?过早会……