这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。今天我学习了go语言性能优化。## 性能优化是什么
提升软件系统处理能力,减少不必要的消耗,充分发掘计算机的算力
为什么要做性能优化
用户体验: 带来体验的提升
资源高效利用 :降低 成本,提高效率
性能优化的层面
- 业务代码 针对特定场景,具体问题,具体分析,容易获得较大性能收益
- SDK
- 基础库
- 语言运行时 (GC 调度器) 解决更通用的性能问题 考虑更多场景
依靠数据而非猜测 首选优化是最大瓶颈
软件质量至关重要
测试用例:覆盖尽可能多的场景,方便回归 文档 隔离 可观测:必要的日志输出
自动内存管理
什么是自动内存管理
-
动态内存
-
程序在运行是根据需求动态分配的内存 malloc()
-
自动内存回收:由程序语言的运行时系统管理动态内存
-
避免手动管理内存,专注实现业务逻辑
-
保证内存使用的正确性和安全性 double-free problem user-after-free problem 有很多问题
-
三个任务
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
自动内存管理 相关概念
- Mutator 业务线程,分配新对象,修改对象指向关系
- Collector GC线程,找到存活对象,回收死亡对象的内存空间
- Serial GC 只有一个Collector
- Parallel GC 支持多个collectors同时回收的GC算法
- Concurrent GC mutator(s)和collector(s)可以同时进行