这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。
自动内存管理
基本概念
- 动态内存
- 程序在运行时根据需求动态分配的内存:malloc()
- 自动内存管理:由程序语言的运行时系统管理动态内存
- 避免手动内存管理,专注于实现业务逻辑
- 保证内存使用的正确性和安全性: double-free problem, use-after-free problem
- 三个任务
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
追踪垃圾回收
分代GC
引用计数
Go内存管理及优化
内存分配
对象分配是高频操作:每秒分配GB级别数据
小对象的占比较高
Go内存分配比较耗时
balanced GC
编译器和静态分析
编译器结构
静态分析
过程内和过程间分析
Go编译器优化
函数内联
内联:将被调用函数的函数体的副本替换到调用位置上,同时重写代码以反映参数的绑定
- 优点:
- 消除函数调用开销,如传递参数、保存寄存器等
- 将过程间分析转换为过程内分析,帮助其他优化,如逃逸分析
- 缺点:
- 函数体变大
- 编译生成的Go镜像变大
逃逸分析
加油!