前言
这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
今日学习内容:
- 自动内存管理
- Go 内存管理及优化
- 编译器和静态分析
- Go 编译器优化
正文
性能优化是什么?
- 提升软件系统处理能力,减少不必要的消耗,充分挖掘计算机算力
为什么要做性能优化?
- 提升用户体验
- 资源高效利用,降低成本,提高效率
各个层面的性能优化
- 业务层优化
- 针对特定场景,具体问题,具体分析
- 容易获得较大性能收益
- 语言运行时优化
- 解决更通用的性能问题
- 考虑更多场景
- Tradeoffs
- 数据驱动
- 自动化性能分析工具——pprof
- 依靠数据而非猜测
- 优先优化最大的瓶颈
自动内存管理
Go 内存管理及优化
编译器和静态分析
Go 编译器优化
相关术语解读
自动内存管理
- Auto memory management: 自动内存管理
- Grabage collction: 垃圾回收
- Mutator: 业务线程
- Collector: GC 线程
- Concurrent GC: 并发 GC
- Parallel GC: 并行 GC
- Tracing garbage collection: 追踪垃圾回收
- Copying GC: 复制对象 GC
- Mark-sweep GC: 标记-清理 GC
- Mark-compact GC: 标记-压缩 GC
- Reference counting: 引用计数
- Generational GC: 分代 GC
- Young generation: 年轻代
- Old generation: 老年代
内存管理及优化
- TCMalloc
mmap()
系统调用- scan object 和 noscan object
- mspan, mcache, mentral
- Bump-pointer object allocation: 指针碰撞风格的对象分配
编译器和静态分析
- 词法分析
- 语法分析
- 语义分析
- Intermediate representation (IR) 中间表示
- 代码优化
- 代码生成
- Control flow: 控制流
- Data flow: 数据流
- Intra-procedural analysis 过程内分析
- Inter-procedural analysis: 过程间分析
Go 编译器优化
- Function inlining: 函数内联
- Escape analysis: 逃逸分析