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



