go 1.3
之前使用标记清除go 1.5
三色标记法go 1.8
三色标记法 + 混合写屏障机制
垃圾回收设计的名词
自动释放垃圾回收三色标记法内存管理SWT(stop the world) 全部停止执行
v1.3 之前的标记 - 清除方法
暂停程序业务逻辑,找出不可达的对象,和可达对象。
找到所有的可达对象,并做上标记。
标记完成以后,开始清楚未标记的对象
停止暂停,让程序继续跑,然后循环重复这个过程,直到 process 程序生命周期结束。
标记清除的缺点 STW:让程序暂停,程序出现卡顿(重要问题)标记需要扫描整个
heap
清除数据会产生 heap
碎片将第三步和第四步调换位置,缩短 STW
的返回,但是还是会很大。
二.三色标记法
三色标记法的流程
只要是新创建的对象,默认颜色就是白色
第二步,每次 GC 回收开始,然后从根节点开始遍历所有对象,把遍历到的对象,从白色集合放入灰色集合
遍历灰色集合,将灰色对象的引用对象,从白色集合放入灰色集合,之后会将此灰色对象放入到黑色集合。
遍历上边的步骤,直到灰色节点里没有东西。
如果三色标记法不使用 STW 会出现的问题
如果三色标记法不被 STW 保护
强弱三色不变式
强制性的不允许黑色对象引用白色对象
:破坏了条件一黑色对象可以引用白色对象,但是要求白色对象的链路上游,存在灰色对象
:破坏了条件二只要满足了强三色不变式或者弱三色不变式之一,就可以保证对象不丢失。那么如何保证呢?就要借助于屏障机制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)