分享
  1. 首页
  2. 文章

golang gc机制学习

sivolin · · 4580 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

以下针对go1.5

gc方法


参考官方文章:https://blog.golang.org/go15gc,go的gc看起来类似于宽度优先搜索算法。
1. 将heap看作是一个图,其内部存储的变量之间有指针相互联系。所有变量最初都被着色为白色
2. 遍历heap,选择root节点,将它们标记为灰色
3. 针对上面选择的每一个root节点,首先将其颜色变为黑色,然后迭代的去访问他的孩子节点(即其所代表的变量内部的指针成员所指向的其他节点)
4. 针对每个孩子节点,返回第2步进行相同的处理
最后,所有能够被访问到的节点颜色都被标记为黑色,无法访问到的节点则依然是白色,这些白色节点就是孤立节点,它们的内存会被回收。
整个过程图1所示。
图一

GC控制


Go语言提供了一个变量GOGC,用来对gc进行控制。该变量表示:最近一次gc过后,总的heap内存比所有可达节点所占用heap内存 大的百分比。如果GOGC=100则表示最近一次gc过后,总的heap内存比所有可达节点所占用heap内存大100%,即总heap内存是可达节点内存的2倍。
该值越大,则gc速度越快,但程序占用的内存较大,gc效果相对不明显。反之,则gc对内存的清理效果明显,但往往需要更多的时间。此处存在时间和空间的折中考虑

GC性能


整个gc过程是和程序的执行并发进行的,从图1中可以看出STW(stop-the-world)只占据很少的一部分时间,大部分时间是并发执行的,因而gc的延时性能较好。
采用STW机制的gc CPU占用示意图如下图所示:
STW
GO所采用的gc CPU占用示意图如下图所示:
这里写图片描述


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:sivolin

查看原文:golang gc机制学习

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4580 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏