以下理解来自 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. 标签:认识,回收,GC,heap,几点,GOGC,roots,指针 From: https://www.cnblogs.com/zongzw/p/18225984