Go GC

1、什么是GC?
2、为什么会有GC?
3、GC的优点?
4、GC的缺点?
5、Go中的GC历史
6、Go中的GC实现原理(三色标记)
7、Go怎么手动调用GC?

一、什么是GC?
GC是Go语言中的内存自动回收管理器(常称为垃圾回收器)。业界常见的垃圾回收机制有引用计数、标记-清除、分代收集。
1)引用计数:对每个对象维护一个引用计数,当引用该对象的对象被摧毁时,引用计数减一,引用计数为零时回收该对象。
优点:对象可以很快被回收,不会出现内存耗尽或者达到某个阀值时才回收。
缺点:不能很好的处理循环引用(https://www.jianshu.com/p/0cfe42ed237c],而且实时维护引用计数,也有一定的代价。
代表语言:Python、Php、Swift
2)标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记为“被引用”,没有被标记的进行回收。
优点:解决了引用计数的缺点。
缺点:需要STW,就是需要暂时停掉程序运行。
代表语言:Golang(使用三色标记法)
3)分代收集:按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,而短的放入新生代,不同代有不同的回收算法和回收频率。
优点:回收性能好
缺点:算法复杂
代表语言:JAVA

二、为什么会有GC?
解决开发时的内存管理的麻烦,以及避免内存泄露的麻烦。

三、GC的优点?
不再需要自己写代码进行垃圾回收,避免内存泄露的隐患。

四、GC的缺点?
占用性能,但是在这个性能过剩的时代,可以忽略不计了

五、Go中的GC历史
https://blog.csdn.net/erlib/article/details/51850912

6、Go中的GC实现原理(三色标记)
1)有哪三色?
灰色、黑色、白色
2)三色代表什么意思?
白色:未搜索
灰色:正搜索
黑色:已搜索
3)三色标记的工作原理?
起初所有对象都是白色的
扫描找出所有可达对象,标记为灰色,放入待处理队列
从队列提取灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色
写屏障监视对象内存修改,重新标色或放入队列

7、Go怎么手动调用GC?
runtime.GC()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 参考连接: https://www.cnblogs.com/xumaojun/p/8547439.html htt...
    坤_7a1e阅读 8,295评论 0 6
  • 简单了解 GC 与 mutator 线程并发运行,允许多个 GC 线程并行运行 在 GC 的过程中同时运行的 G ...
    Leonardyp阅读 8,969评论 0 2
  • Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 Getting ...
    陈先生_9e91阅读 24,060评论 2 18
  • GC扫描栈 问题的关键在于这段代码: 编译器决定在栈上分配 T,并且因为编译器无法跟踪其地址结束的位置,所以编译器...
    Leonardyp阅读 5,766评论 0 0
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 5,689评论 0 7

友情链接更多精彩内容