GoGC-Go垃圾收集器
2023-10-09 21:16:31 16 举报
AI智能生成
Go GC(Garbage Collection)是Go语言的垃圾回收机制,它自动管理内存,帮助开发者避免内存泄漏和野指针等问题。Go GC使用标记-清除(Mark and Sweep)算法进行垃圾回收,分为两个阶段:标记阶段和清除阶段。在标记阶段,GC会遍历所有对象,将还在使用的对象打上标记;在清除阶段,GC会回收未被标记的对象所占用的内存。此外,Go GC还支持并发回收,可以在程序运行过程中进行垃圾回收,减少停顿时间。总之,Go GC为Go语言提供了高效、可靠的内存管理方案。
作者其他创作
大纲/内容
基础知识
背景介绍
什么是垃圾?
如何识别垃圾?
引用计数算法
定义
实现
优缺点
Python 是如何解决循环引用的问题呢?
图1
图2
追踪式回收算法(可达性分析)
定义
实现
JVM 如何判断栈上的数据是什么类型?
保守式 GC
半保守式 GC
准确式 GC
如何清理垃圾?
标记-清除算法
定义
优缺点
优化策略
位图标记法
多个空闲链表
标记-复制算法
定义
实现
优缺点
标记-压缩算法(标记-整理算法)
定义
优缺点
进一步优化方向有哪些?
分代收集
JVM GC
堆区划分
新生代垃圾收集(Minor Collection)
老年代垃圾收集(Full Collection/Major Collection)
跨代引用问题
卡表
增量式 GC
并发式 GC
设计原理
三色标记算法
标记过程
执行时为啥需要 STW?
漏标情况 - 不能接受
多标情况 - 可以接受
如何解决漏标情况? - 满足三色不变性
如何满足三色不变性?- 屏障技术
写屏障技术
插入写屏障-满足强三色不变性
举例
删除写屏障-满足弱三色不变性
举例
实现原理
代码中的全局变量
执行周期
清理终止阶段-STW
什么是安全点(Safe point)?
如何得知此时需要在安全点暂停呢?
标记阶段-并发执行(并发扫描&标记辅助)
标记终止阶段-STW
清理阶段-并发执行
演进过程
去中心化的垃圾收集协调器「v1.6」
垃圾收集调步算法(GC Pacing)「v1.5 、v1.10」
背景介绍
算法图例
彻底移除重新扫描栈的过程「v1.9」
之前为什么每次 GC 要重新扫描栈?
解决方式
混合写屏障「v1.8」
在标记阶段新创建对象都标记成黑色
其他
GC 触发时机
分配内存时,达到 GOGC 比例
后台触发 - sysmon 检测
手动触发 - runtime.GC()
GC 调优
参考资料
深度揭秘 Java GC 底层
白话 Go 的垃圾回收原理
深入理解Go GC
Go 垃圾收集器的实现原理
0 条评论
下一页