GC 协助标记 (Mark Assist) 是 Go 语言并发垃圾回收中的一种背压(Backpressure)机制

简要说明如下:

  1. 核心逻辑:当一个 Goroutine 分配内存的速度超过了 GC 后台扫描的速度时,Go 运行时会扣除该协程的“信用分”。
  2. 强制干活:如果信用分为负,该协程会被强制暂停当前的业务逻辑,转去帮 GC 执行扫描标记工作
  3. 主要目的:防止堆内存因分配过快而失去控制(避免 OOM),确保标记阶段能在内存达到阈值前完成。
  4. 对应用的影响
    • 非 STW:它不会停顿整个程序,只影响分配过快的特定协程。
    • 性能损耗:会导致受影响的业务请求响应时间(Latency)显著变长,通常是 P99 延迟抖动的主要原因。

一句话总结:“谁分配太快,谁就得停下来帮 GC 扫垃圾。