golang中的GC

本文详细介绍了Golang从1.3到1.8版本的垃圾回收(GC)机制变化,包括标记清除、三色标记法以及混合写屏障机制。GC主要目标是缩短STW时间,提高程序性能。三色标记法引入了强/弱三色不变式,并通过插入和删除写屏障优化,1.8版本的混合写屏障进一步提升了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。

GOLANG的垃圾回收机制

现在go1.14所用的是三色标志法和GC混合写屏障,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收

GC版本变化

Go V1.3 标记清除(mark and sweep)
Go V1.5 三色标记法
Go V1.8 加入混合写屏障

Go V1.3的标记清除

标记清除的流程

  1. 触发GC,暂停程序业务逻辑(STW),找出可达对象和不可达对象
    在这里插入图片描述
    如图所示,箭头表示引用关系,1,2,3,4,7这五个对象就是可达对象,5和6这两个对象就是不可达对象
  2. 开始标记,找到它所有的可达对象,并做上标记,如上图中的红色对象部分。
  3. 完成标记,开始清除未标记的对象
  4. 完成清除,停止暂停,然后循环重复以上四步,直到该程序进程生命周期结束

整个流程的图示:
在这里插入图片描述

问题:触发GC的条件是什么

标记清除的缺点

  • 存在STW。因为在GC阶段需要暂停整个程序,程序出现卡顿,严重影响性能(最重要的 )
  • 标记过程需要扫描整个heap和stack(堆栈信息),无疑是加长了整个STW的持续时间,还是影响性能的问题
  • 清除数据会产生heap碎片,也就是产生一些不连续的碎片内存空间,对后续的重用,重组增加了困难

<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值