Golang GC(垃圾回收机制)及内存逃逸

GC 触发条件:
        1> 当前内存分配达到一定比例则触发
        2> 2 分钟没有触发过 GC 则触发 GC
        3> 手动触发,调用 runtime.GC()

阈值是由一个gcpercent的变量控制的,当新分配的内存占已在使用中的内存的比例超过gcprecent时就会触发。 比如一次回收完毕后,内存的使用量为5M,那么下次回收的时机则是内存分配达到10M的时候。也就是说,并不是内存分配越多,垃圾回收频率越高。 如果一直达不到内存大小的阈值呢?这个时候GC就会被定时时间触发,比如一直达不到10M,那就定时(默认2min触发一次)触发一次GC保证资源的回收。

GO :垃圾回收机制 (GC: Garbage Collection)

阻塞状态是go调度的一个待唤醒的状态,是不能被gc的。

go V1.3之前 采用的gc标记回收法(mark&sweep)
从根变量来时遍历所有被引用对象,标记之后进行清除操作,对未标记对象进行回收

那么如何从代码方面优化以减少gc导致的STW的时间?

  • 减少对象的分配

  • 使用sync.Pool

GO V1.5 采用三色标记法:

三色标记最大的好处是可以异步执行,从而可以以中断时间极少的代价或者完全没有中断来进行整个 GC。

三色标记法很简单

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值