这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
性能优化是什么?
提升软件系统处理能力,减少不必要的减耗,充分发掘计算机算力
为什么要做性能优化?
用户体验:带来用户体验的提升-让刷抖音更丝滑,让双十一购物不再卡顿
资源高效利用:降低成本,提高效率-很小的优化乘以海量机器会显著的性能提升
和成本节约
性能优化的层面
业务层优化
针对特定场景、具体问题、具体分析
容易获得较大性能收益
语言运行时优化
解决更通用的性能问题
考虑更多场景
Tradeoffs
数据驱动
自动化性能分析工具-pprof
依靠数据而非猜测
首先优化最大瓶颈
自动内存管理
动态内存
程序在运行时根据需求动态分配的内存:malloc()
自动内存管理(垃圾回收)由程序语言的运行时系统管理动态内存
避免手动内存管理,专注于实现业务逻辑
保证内存使用的正确性和安全性:double-free problem等
分代GC
分代假说
intuition:很多对象在分配出来后很快就不在使用了
每个对象都有年龄:经历过GC的次数
目的:对年轻和老年的对象,制定不同的GC策略,降低整体内存管理的开销
不同年龄的对象处于heap的不同区域
Balanced GC
GAB对于go内存管理来说是一个对象
本质:将多个小对象的分配合并成一次达对象的分配
问题:GAB的对象分配方式会导致内存被延迟释放
方案:移动GAB中存活的对象
当GAB总大小超过一定阈值时,将GAB中存活的对象复制到另外分配的GAB中
原先的GAB可以释放,避免内存泄漏
本质:用copyingGC的算法管理小对象
编译器的结构
重要的系统软件
识别符合语法和非法的程序
生成正确且高效的代码
分析部分
词法分析,生成词素
语法分析,生成语法树
语义分析,收集类型信息,进行语义检查
中间代码的生成,生成intermediate representation
综合部分
代码优化:机器无关代码,生成优化后的IR
代码生成,生成目标代码