分享
go垃圾回收
一斗 · · 1438 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
GC算法
1. 引用计数
每个单元维护一个域,保存其他单元指向它的引用数量,当引用的数量为0时,将其回收。
优点:
- 算法易实现
- 内存管理与用户程序交织在一起,将GC的代价分散到整个程序,不用STW
缺点
- 不能处理循环引用
- 维护引用计数降低运行效率
2. 标记-清扫
是一种自动内存管理,基于追踪的垃圾收集算法。垃圾回收程序对所有的存活单元进行一次全局遍历确定哪些单元可以回收。算法分为两部分:标记和清扫。标记阶段表明所有存活单元,清扫阶段将垃圾回收。
优点:
- 避免了引用计数不能处理循环引用的缺点
缺点:
- STW(挂起程序)
三色标记算法:对标记阶段的改进(标记过程和用户程序并发进行)
- 起初所有对象都是白色
- 从根出发扫描所有可达对象,标记为灰色,放入待处理队列
- 从队列取出灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色
- 重复3,直到灰色对象队列为空,此时白色对象即为垃圾,进行回收
Golang的GC实现基于此。
参考:
Golang垃圾回收剖析
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1438 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
GC算法
1. 引用计数
每个单元维护一个域,保存其他单元指向它的引用数量,当引用的数量为0时,将其回收。
优点:
- 算法易实现
- 内存管理与用户程序交织在一起,将GC的代价分散到整个程序,不用STW
缺点
- 不能处理循环引用
- 维护引用计数降低运行效率
2. 标记-清扫
是一种自动内存管理,基于追踪的垃圾收集算法。垃圾回收程序对所有的存活单元进行一次全局遍历确定哪些单元可以回收。算法分为两部分:标记和清扫。标记阶段表明所有存活单元,清扫阶段将垃圾回收。
优点:
- 避免了引用计数不能处理循环引用的缺点
缺点:
- STW(挂起程序)
三色标记算法:对标记阶段的改进(标记过程和用户程序并发进行)
- 起初所有对象都是白色
- 从根出发扫描所有可达对象,标记为灰色,放入待处理队列
- 从队列取出灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色
- 重复3,直到灰色对象队列为空,此时白色对象即为垃圾,进行回收
Golang的GC实现基于此。
参考:
Golang垃圾回收剖析