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