这是我参与「第五届青训营 」笔记创作活动的第8天。
一、本堂课重点内容:
- 内存管理优化
- 编译器优化
二、详细知识点介绍:
- 性能优化:提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力。
- 软件基本结构(由上到下):业务代码(处理用户请求)→SDK & 基础库(提供抽象逻辑,如高性能数据结构、网络库、IO库)→语言运行时(语言的实现)→OS(提供隔离运行时环境)。
- 业务层优化:针对特定场景,具体问题,具体分析;容易获得较大性能收益 语言运行时优化:解决更通用的性能问题;考虑更多场景;Tradeoffs. 数据驱动:自动化性能分析工具——pprof;依靠数据而非猜测;首先优化最大瓶颈。
- 性能优化与软件质量
- 软件质量至关重要
- 在保证接口稳定的前提下改进具体实现
- 测试用例:覆盖尽可能多的场景,方便回归
- 文档:写清楚做了什么,没做什么,能达到怎么样的效果
- 隔离:通过选项控制是否开启优化
- 可观测:必要的日志输出
- 自动内存管理概念
- 自动内存管理(垃圾回收):有程序语言的运行时系统管理动态内存,从而可以避免手动内存管理,专注于实现业务逻辑,也可以保证内存使用的正确性和安全性。它的目的是:为新对象分配空间;找到存活对象;回收死亡对象的内存空间。
- Mutator:业务线程,分配新对象,修改对象指向关系
- Collector: GC线程,找到存活对象,回收死亡对象的内存空间
- Serial GC:只有一个collector
- Parallel GC:支持多个collectors同时回收的GC算法
- Concurrent GC: mutator(s)和collector(s)可以同时执行
- 评价GC算法:安全性:不能回收存活的对象;吞吐率(Throughput): 花在GC上的时间;暂停时间(Pause time): stop the world (STW) 业务是否感知;内存开销(Space overhead) GC元数据开销。
- 追踪垃圾回收:回收指针指向关系不可达的对象。步骤为①标记跟对象:静态变量、全局变量、常量、线程栈等②标记找到可达对象③清理所有不可达对象
三、引用参考: