文章目录
MarkSweep 即 标记 - 清除算法
MarkSweep 从名字就能知道,此算法包含两个阶段
- 标记阶段,负责将所有活动对象打上标记
- 清除阶段,负责将没有被标记的对象回收
标记阶段从 root
进行出发扫描,根据引用关系寻找到所有对象并打标记。然后清除阶段则是从堆头部向后扫描对象,将非活动对象进行回收,以待下次分配。这个就是该算法的逻辑执行过程。
基础实现
基础实现是上述逻辑过程的一个简单实现
代码
// 头部结构
type header struct {
Marked bool
Size int
}
// 对象
type object struct {
Header header
Field interface{
}
Children []*object
}
// 根,此处是抽象概念,根包含全局变量空间,调用栈等
func markPhrase() {
for _, o := range root {
mark(