性能优化&内存管理 | 青训营笔记

129 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第17天

性能优化是干嘛的?

  • 提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力
  • 减少IO延迟

为什么要做性能优化?

  • 用户体验: 带来用户体验的提升
  • 让刷抖音更丝滑,让双十一购物不再卡顿
  • 资源高效利用: 降低成本,提高效率 一 很小的优化乘以海量机器会是显著的性能提升和成本节约

性能优化的对象是谁?

  • 业务代码
  • SDK
  • 基础库
  • 语言运行时(语言的实现GC、调度器等
  • OS(提供隔离的运行时环境

如何做性能优化?

  1. 业务层优化
  • 针对特定场景,具体问题,具体分析。
  • 容易获得较大性能收益。
  • 比如使用pprof什么的工具来分析具体的业务代码
  1. 语言运行时优化
  • 解决更通用的性能问题
  • 考虑更多场景
  • Tradeoffs等全局性的优化,涵盖了整个大方面的优化。
  1. 无论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) 可以同时执行

这里举个例,蓝色代表工作的线程,黄色箭头则是回收的线程。 image.png

SerialGC是先全停掉工作线程,一个个地回收。 image.png

ParallelGC是先全停掉工作线程,全部由对应的回收线程回收。 image.png

ConcurrentGC则是部分工作线程暂停回收,其他的工作线程不受次暂停线程的影响。这样保证了效率。 image.png

从图的角度看,则是标记存活的对象是不会在下一次GC过程被清理的。 image.png

待更新~