欢迎光临散文网 会员登陆 & 注册

go内存管理-垃圾回收-学习心得

2023-01-01 15:47 作者:风格星辰  | 我要投稿

今天学习了下go内存管理中的垃圾回收,分享下心得

首先、分享下常见几种垃圾回收的机制

1、引用技术法:记录对象被引用的次数,创建时为1,每次被引用加1。每次引用被回收就减1。当计数为0时,回收该对象。

使用该机制的语言有python

优点:实现简单,对象可以很快的被回收

缺点:不能很好的处理循环引用

2、标记清除法:从根对象出发,扫描每个对象,根据其是否被引用做相应的标记。等扫描结束后,回收没有被标记的对象。

go语言就是使用的三色标记法

优点:解决了引用计数的缺点。

缺点:需要STW,即要暂时停掉程序运行。

3、分代回收:将对象分为不同分代,如老生代和新生代等,不同分代采取不同的回收算法。

优点:回收性能好

缺点:算法复杂


重点说明下go的三色标记法

其实没有所谓的三色标记,是三种状态。

灰色:对象等待处理

黑色:对象已被标记

白色:对象未被标记

回收时,首先将所有对象标记为白色。然后从根对象出发,将其标记为黑色,将其引用对象标记为灰色。直到扫描结束。然后取出所有灰色对象,将其标记为黑色,将其引用对象标记为灰色。循环这个过程。直到没有灰色对象。此时,所有存活对象都已经被标记了,回收所有白色对象。


垃圾回收触发时机

1、内存分配时检测到分配的内存时之前的一倍及以上时触发

2、默认2分钟触发一次。

3、可以手动触发 runtime.GC()


参考自go专家编程

第四章:内存管理 - 4.2 垃圾回收原理 - 《GO专家编程》 - 书栈网 · BookStack


go内存管理-垃圾回收-学习心得的评论 (共 条)

分享到微博请遵守国家法律