这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
课程内容
围绕Go 内存分配和编译器,分析 Go 内存管理过程中的问题,提出解决方案;
讲解编译器基本算法,引出编译器优化路径。
Go语言高性能优化与落地实践
优化
内存管理优化、编译器优化
相关问题
自动内存管理和Go内存管理机制、编译器优化的基本问题和思路
追求性能
性能优化
提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力
为什么
用户体验:提升用户体验
资源高效利用:降低成本,提高效率
优化的层面
业务代码
业务层优化:针对特定场景,具体问题,具体分析,容易获得较大性能收益
SDK
基础库
语言运行时
语言运行时优化:解决更通用的性能问题、考虑更多场景、Tradeoffs
数据驱动:自动化性能分析工具 pprof、依靠数据而非猜测、首先优化最大瓶颈
OS
内存管理
动态内存
垃圾回收
动态内存:程序在运行时根据需求动态分配的内存
自动内存管理:由程序语言的运行时系统管理动态内存
三个任务
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
相关概念
- Auto memory management: 自动内存管理
- Grabage collction: 垃圾回收
- Mutator: 业务线程,分配新对象,修改对象指向关系
- Collector: GC 线程,找到存活对象,回收死亡对象的内存空间
- Concurrent GC: 并发 GC,mutator(s)与collector(s)可以同时执行
- Parallel GC: 并行 GC,支持多个collectors同时回收的GC算法
- Tracing garbage collection: 追踪垃圾回收
- Copying GC: 复制对象 GC
- Mark-sweep GC: 标记-清理 GC
- Mark-compact GC: 标记-压缩 GC
- Reference counting: 引用计数
- Generational GC: 分代 GC
- Serial GC:只有一个collector
追踪垃圾回收
分代GC
引用计数
Go内存管理及优化
Go内存分配- 分块、Go内存分配- 缓存、Go内存管理优化、Balanced GC
编译器优化
函数内联、逃逸分析、Beast Mode 性能收益