这是我参与「第五届青训营 」笔记创作活动的第17天
性能优化是干嘛的?
- 提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力
- 减少IO延迟
为什么要做性能优化?
- 用户体验: 带来用户体验的提升
- 让刷抖音更丝滑,让双十一购物不再卡顿
- 资源高效利用: 降低成本,提高效率 一 很小的优化乘以海量机器会是显著的性能提升和成本节约
性能优化的对象是谁?
- 业务代码
- SDK
- 基础库
- 语言运行时(语言的实现GC、调度器等
- OS(提供隔离的运行时环境
如何做性能优化?
- 业务层优化
- 针对特定场景,具体问题,具体分析。
- 容易获得较大性能收益。
- 比如使用pprof什么的工具来分析具体的业务代码
- 语言运行时优化
- 解决更通用的性能问题
- 考虑更多场景
- Tradeoffs等全局性的优化,涵盖了整个大方面的优化。
- 无论1.2.如何变化,都要数据驱动优化。要像微积分一样抓大放小,抓住主要的优化,不要过早优化细枝末节。
自动内存管理介绍
话说自动内存管理管理的对象是谁?以及是为什么要这样管理、管理的目的是什么是一个很容易被忽略的问题。自动内存管理管理的是动态内存,即是类似于 malloc() 出来的那种。垃圾回收是基于 程序语言运行时系统来管理动态内存。这样是有安全保障的,有效规避C/C++ double free、use after free等问题。因为机器会帮你查~
-
基础概念
Mutator: 业务线程,分配新对象,修改对象指向关系 Collector: GC 线程,找到存活对象,回收死亡对象的内存空间 Serial GC: 只有一个 collector Parallel GC: 支持多个 collectors 同时回收的 GC 算法 Concurrent GC: mutator(s) 和 collector(s) 可以同时执行
这里举个例,蓝色代表工作的线程,黄色箭头则是回收的线程。
SerialGC是先全停掉工作线程,一个个地回收。
ParallelGC是先全停掉工作线程,全部由对应的回收线程回收。
ConcurrentGC则是部分工作线程暂停回收,其他的工作线程不受次暂停线程的影响。这样保证了效率。
从图的角度看,则是标记存活的对象是不会在下一次GC过程被清理的。
待更新~