知识卡片

GOGC调步

普通读书笔记卡 · 1487.c

内容

(书中 Go 1.14,调步算法始于 Go 1.5)gcpercent 默认 100,即目标堆约为上次存活堆两倍;小于 0 关闭 GC。标记终止阶段按目标内存与实际占用的偏差计算偏差率,下次触发率在上次基础上渐进调整半个偏差率。调 GOGC 本质是在内存、CPU 和延迟间重新定价。

参考来源

- 位置:《Go语言底层原理剖析》第20章《深入垃圾回收全流程》20.4节《标记终止阶段》 - 结论依据:原文明确"gcpercent的默认值为100,代表目标内存是上一次GC目标内存的2倍。当gcpercent的值小于0时,将禁用Go的垃圾回收",并给出调步公式"下次GC触发率=上次GC触发率+1/2×偏差率","触发内存=触发率×目标内存,其中,触发率不能大于0.95,也不能小于0.6",因此可以推出"GOGC 默认100即目标堆两倍存活堆、调步算法据偏差渐进调整触发点"的结论。 - 原始内容:goal为下次GC完成后的目标内存,其大小取决于本次GC扫描后的占用内存及gcpercent的大小。gcpercent可以由用户动态设置……gcpercent的默认值为100,代表目标内存是上一次GC目标内存的2倍。当gcpercent的值小于0时,将禁用Go的垃圾回收……下次GC触发率=上次GC触发率+1/2×偏差率……触发内存=触发率×目标内存,其中,触发率不能大于0.95,也不能小于0.6。