关于GOGC的几点认识

以下理解来自 https://tip.golang.org/doc/gc-guide
文章并不好理解。。

  • go 的标准库runtime提供了GC的相关能力。
  • 栈上的空间不归GOGC管,GOGC只考虑heap空间。
  • 所谓的transitive性质:部分衍生空间会纳入到GOGC回收中。
  • GOGC使用 tracing garbage collection的方式。
  • GC需要关注的两种类型: object(实际分配在heap中的内容)和 指针(对内置对象类型的指针和对结构体的指针)
  • 所有这些对象和指针共同组成对象图。为了区分哪些是live memory(正常分配,正在被用,无需回收),GC会从roots开始遍历所有的对象和指针。
  • 两类roots: 局部变量和全局变量。遍历的过程叫扫描。
  • Mark and sweep,先根据策略mark一遍,然后如果heap memory没有被mark,则被视为垃圾内存,需要回收。回收动作叫做 sweep。
  • STW: Stop the world. 😦
  • GOGC在 1)尽量减少GC对CPU的消耗 和 2)尽量节省出更多的内存 两者之间做了一个平衡。
posted @ 2024-06-01 14:53  zongzw  阅读(80)  评论(0)    收藏  举报