自动内存管理
- 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: 老年代
-
GO内存管理及优化
- 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: 逃逸分析
引言
-
什么是性能优化?
- 提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力
-
为什么要做性能优化?
- 用户体验:带来用户体验的提升 —— 让刷抖音更丝滑,让双十一购物不再卡顿
- 资源高效利用:降低成本,提高效率 —— 很小的优化乘以海量机器会是显著的性能提升和成本节约
-
性能优化
-
业务层优化
- 针对特定场景,具体问题,具体分析
- 容易获得较大性能收益
-
语言运行时优化
- 解决更通用的性能问题
- 考虑更多场景
- Tradeoffs
-
数据驱动
- 自动化性能分析工具 —— pprof
- 依靠数据而非猜测
- 首先优化最大瓶颈
-
-
软件质量
-
保证接口稳定的前提下改进实现
-
- 测试驱动
- 通过清晰的文档告诉用户这一项优化做了什么,没做什么,能达到怎样的效果
- 隔离,优化代码用选项和原先的路径隔离,保证优化未启用时的行为同以前一致
- 可观测、可灰度、可回滚