Golang入门——GC机制

常见GC算法

引用计数

每个对象维护一个计数器,当引用该对象的对象被销毁时,计数器减一,当计数器为0时回收该对象。
代表语言:Python,PHP,Swift
优点:对象可以很快被回收,不会出现内存耗尽再回收的现象。
缺点:不能很好的处理循环引用,而且维护计数器需要开销。

标记清除

从根变量开始便利所有引用对象,当引用对象没有标记“被引用”,则回收该对象。
代表语言:GO(三色标记法)
优点:解决引用计数的缺点。
缺点:需要STW,暂时停止程序运行。

分代收集

按照对象的证明周期长短划分不同代空间,生命周期长的放入老年代,生命周期短的放入新生代,不同代有不用的回收算法以及回收频率。
代表语言:Java
优点:回收性能好。
缺点:算法复杂。

Go的GC

mark内存标记

在span的数据结构中维护位图allocBits表示内存块分配情况,同时还维护另一个位图gcmarkBits记录每块内存的标记情况。由于allocBits与gcmarkBits数据结构相同,回收时将allocBits指向gcmarkBits,表示只有标记过的内存才是存活的。gcmarkBits会在下次标记时重新分配内存。

三色标记法

灰色:对象还在标记队列中等

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值