栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go的垃圾回收机制

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go的垃圾回收机制

  • 一.历史原因
 

go发展史上采用过的一些方法
  • go 1.3 之前使用标记清除
  • go 1.5 三色标记法
  • go 1.8 三色标记法 + 混合写屏障机制

垃圾回收设计的名词
  • 自动释放
  • 垃圾回收
  • 三色标记法
  • 内存管理
  • SWT(stop the world) 全部停止执行
 

v1.3 之前的标记 - 清除方法

暂停程序业务逻辑,找出不可达的对象,和可达对象。


找到所有的可达对象,并做上标记。

标记完成以后,开始清楚未标记的对象

停止暂停,让程序继续跑,然后循环重复这个过程,直到 process 程序生命周期结束。

 

标记清除的缺点
  • STW:让程序暂停,程序出现卡顿(重要问题)
  • 标记需要扫描整个 heap
  • 清除数据会产生 heap 碎片
  • 将第三步和第四步调换位置,缩短 STW 的返回,但是还是会很大。

二.三色标记法

三色标记法的流程

只要是新创建的对象,默认颜色就是白色


第二步,每次 GC 回收开始,然后从根节点开始遍历所有对象,把遍历到的对象,从白色集合放入灰色集合

遍历灰色集合,将灰色对象的引用对象,从白色集合放入灰色集合,之后会将此灰色对象放入到黑色集合。

遍历上边的步骤,直到灰色节点里没有东西。

 


如果三色标记法不使用 STW 会出现的问题


如果三色标记法不被 STW 保护

  1. 一个白色对象被黑色对象引用
  2. 灰色对象与它之间的可达关系的白色对象遭到破坏
  3. 如果两个条件同时满足,那么就会出现对象丢失的现象
 

强弱三色不变式
  • 强制性的不允许黑色对象引用白色对象 :破坏了条件一
  • 黑色对象可以引用白色对象,但是要求白色对象的链路上游,存在灰色对象 :破坏了条件二

只要满足了强三色不变式或者弱三色不变式之一,就可以保证对象不丢失。那么如何保证呢?就要借助于屏障机制。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号