Go 垃圾回收
Go 的垃圾回收负责自动管理堆对象生命周期,它降低了手动内存管理成本,但也会直接影响延迟、吞吐和内存占用。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 高级运行时与抽象 MOC
- 并列概念: Go pprof, Go 内存模型
Go 垃圾回收
一句话定义
Go 垃圾回收是运行时自动回收不再可达对象的一套机制,它让开发者不用手动释放大多数内存,但并不意味着内存问题会自动消失。
核心机制 / 工作原理
Go 的 GC 主要想平衡三件事:
- 自动管理内存生命周期
- 控制暂停时间
- 维持整体吞吐和内存占用的平衡
对日常开发者来说,最实用的认知不是实现细节,而是:
- 分配很多对象会有成本
- 长时间保留对象会增加堆压力
- GC 行为会反映到延迟和内存曲线上
最小例子 / 最小场景
当服务频繁创建大量短生命周期对象时,即使业务逻辑正确,也可能因为分配和回收压力导致性能波动。
为什么这部分重要
很多 Go 服务的性能问题,最后都不是“代码写错了”,而是对象分配模式、缓存策略、切片扩容和生命周期管理不合理。理解 GC 后,才能更稳地读懂 pprof 和优化结果。
边界与易混淆点
- 有 GC 不等于“内存就不用管”
- 降低分配次数和减少不必要保活,往往比微观语法优化更有效
- GC 问题通常要结合 profiling 一起看,不能只靠猜