高性能 Go 语言发行版优化与落地实践 | 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
内存方面
一、自动内存管理
概念:
-
Mutator:业务线程,分配新对象,修改对象指向关系(创建的goroutine)
-
Collector:GC线程,找到存活对象,回收死亡对象的内存空间
-
Serial GC:只有一个collector
-
Parallel GC:支持多个collectors同时回收的GC算法
-
Concurrent GC:mutator(s)和collector(s)可以同时执行
GC:
-
GC算法:安全性、吞吐率、暂停时间、内存开销
-
追踪垃圾回收:
- 标记根对象
- 标记可达对象
- 清理不可达对象
- 根据对象的生命周期使用不同的标记和清理策略
-
分代GC:
-
年龄:经历过GC的次数
-
目的:针对不同年龄年轻或者老年的对象,制定不同的GC策略,降低整体内存管理的开销
-
-
引用计数:
- 每个对象有与之关联的引用次数,大于0则是存活
- 缺点是无法回收环形数据结构、维护引用计数开销较大
二、Go内存管理及优化
内存分配:
-
分块
-
缓存
-
管理优化
go的内存分配
- 实际优化方案:Balanced GC