大家一起学Golang——轻描淡写GC垃圾回收

GC垃圾回收

垃圾回收机制是一种自动管理内存的方式,是内存资源的回收,是程序后台自动判断对象是否要回收,使得开发人员从内存管理上解脱出来。
垃圾回收下列几种:

  • 引用计数
  • 标记清除
  • 三色标记
  • 分代收集

C VS Go 申请内存和释放内存,看出Go GC自动管理内存,确实方便。

//开辟内存空间
int *p = (int*)malloc(sizeof(int));
//释放空间
free(p);
//开辟空间,不需要手动释放
p := new(int)

当前Go GC特征:
三色标记,并发标记和清扫,非分代,非紧凑,混合写屏障。这里重点了解三色标记法和写屏障。

三色标记法:
  • 将所有对象放在白色集合中
  • 从rootset开始遍历可达对象,将可达对象发在灰色集合中,
  • 将灰色集合中对象进行遍历,将可达对象放在灰色集合中,将其本身放在黑色集合中
  • 重复第三步骤 直到灰色集合遍历为空
  • 将白色集合中的对象视为垃圾进行清扫
  • 重置黑色集合对象,将其变为白色,进行下次GC

参考链接:https://studygolang.com/articles/25916

写屏障

在三色标记法中,黑色集合中的对象不能引用无法被灰色对象可达的白色对象。并发标记时,这是go垃圾回收的一个特点,在程序没有执行完,已经在后台进行垃圾回收,这当中如果没有做正确性保障措施,可能会导致漏标,导致实际上可达的对象被清扫掉。于是引入了写屏障, 是在写入指针前执行的一小段代码,以防止并发标记时指针丢失。

参考链接:https://cloud.tencent.com/developer/article/1526095

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值