首页 > > > go语言的垃圾回收(GC)概述
垃圾回收是高级语言的一个进步,其算法目前有几种经典的算法,说go的GC之前先说一下所有的GC的算法:

还有一种是分代收集:一般情况有三代,java举例:新生代,老年代,永久代。当新生代中带阀值时将对象放入老年代,老年代也是如此放入永久代。不同代有不同的回收算法和回收频率。
go语言使用的是三色标记法。首先说一下go的GC触发条件:第一个就是阀值,当内存扩大一倍时,启用GC,再有一个就是默认两分钟执行一次。此外我们可以手动调用GC:runtime.FC()。
之前我们说过STW(Stop The World)是其性能的主要因素,在go的1.8版本开始,STW时间已经优化到100微秒,通常只需要10微秒以下即可。并且1.10版本后,对CPU的占用也进行了优化。大家可以看一下go的源码,在runtime包中,mgc.go文件,对其GC进行了详细的解释。

对于我们在写代码时,如果考虑GC性能问题,我有两个建议给大家,第一个是少用string字符串的 “+”号,第二个是小对象要尽量服复用,局部变量需要尽量少声名,多个的小对象可以放到结构体中,这样方便GC的扫描。这样做是尽可能的追求其性能,我们在写程序时,不仅要考虑功能,性能也是很重要的。
后续会有更多的模式和算法以及区块链相关的,如果你是想学习go语言或者是对设计模式或者算法感兴趣亦或是区块链开发工作者,都可以关注一下。(微信公众号/今日头条:Go语言之美,更多go语言知识信息等)。公众号会持续为大家分享更多干货。
如果大家觉得文章有帮助,欢迎转发!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758/viewspace-3166023/ ,如需转载,请注明出处,否则将追究法律责任。