【青训营】性能优化和自动内存管理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

本文整理自第五届字节跳动青年训练营 后端组

什么是性能优化

提高软件系统处理能力减少不必要消耗充分利用计算机算力

image.png

  • 业务层优化
    • 针对特定场景和具体问题
    • 容易获得较大收益
  • 语言运行时优化
    • 面向全公司的优化非特定场景
    • 解决更通用的性能问题
    • 考虑更多场景

在优化时需要根据数据驱动比如使用自动化性能分析工具–pprof。依靠数据优化而非主观猜测并且首先优化最大的瓶颈

性能优化时需要注意

  • 软件质量至关重要
  • 保证接口稳定的情况下改进具体实现
  • 测试驱动测试用例覆盖尽可能多的场景方便回归
  • 文档做了什么没错什么能达到什么效果
  • 隔离通过选型控制是否开启优化
  • 可观测必要的日志输出

一、自动内存管理

自动内存管理又称垃圾回收由程序语言的运行时系统管理动态内存

  • 避免手动内存管理专注于实现业务逻辑不需要像C一样使用malloc和free函数管理内存
  • 保证内存使用的正确性和安全性解决了double-free problem和use-after-free problem问题

自动内存管理的三个任务是

  • 为新对象分配空间
  • 找到存活对象
  • 回收死亡对象内存空间

1.1 相关概念

  • Mutator业务线程分配新对象修改对象指向关系
  • Collector GC线程找到存活对象回收死亡对象空间

有以下分配算法

Serial GC算法只有一个collectormutator执行到一定位置需gc时collector会中断mutator转为执行collect的gc流程

Parallel GC算法支持多个collectors同时回收的GC算法也需要中断mutator

Concurrent GC多个mutator和多个collector可以同时执行也就是mutator不需要被中断。

image.png

  • 评价GC算法
    • 安全性不能回收存活操作
    • 吞吐率花在GC上的时间
    • 暂停时间业务是否感知
    • 内存开销GC元数据开销

垃圾回收主要是用两种方法

  • 追踪垃圾回收
  • 引用计数

1.2 追踪垃圾回收

对象被回收的条件指针指向关系不可达的对象分三步

  1. 标记根对象

    • 将静态变量、全局变量、常量、线程栈等标记为存活
  2. 标记可达对象

    • 求指针指向关系的传递闭包从根对象出发找到可达对象
  3. 清理不可达对象
    清理不可达对象有三种方法

    • 将存活对象复制到另外的内存空间然后将原来的内存空间全部回收(copying gc)
    • 将死亡对象的内存标记为可分配下次需要分配新空间时直接使用这些空间(mark-sweep gc)
    • 移动并且整理存活对象比如位于1、3、4、7的内存地址的对象是存活的那么将他们移动到0、1、2、3下次分配直接从4开始(mark-compact gc)

我们需要根据对象的生命周期使用不同的标记和清理策略首先我们需要学习分代GC的相关内容

分代GC

分代GC引申自分代假说分代假说指出most objects die young。也就是很多对象分配出来后很快就不再使用了。每个对象的年龄指的是经历GC的次数每一次GC都会将已经死亡的对象回收如果一个对象经历了许多次GC都没有被回收也就证明它是频繁被使用的。

年轻代

  • 常规对象分配一般分配后很快就死亡
  • 由于存活对象很少可以采用copy collection
  • gc吞吐率高

老年代

  • 对象倾向于一直活着反复复制开销大
  • 可以采用mark-sweep collection

于是在设计GC的时候会倾向于针对年轻的和老年的对象制定不同的GC策略从而降低整体的内存开销。不同年龄的对象处于heap的不同区域

1.3 引用计数

每个对象都有一个与之关联的引用数目对象只有当引用数大于0的时候是存活的。也就对象没有被引用的时候就会死亡。

优点是内存管理的操作被平摊在了程序执行过程中在程序执行时就完成了回收而不需要等gc线程来回收。内存管理也不需要了解runtime的实现细节

缺点

  • 维护引用计数开销较大通过原子操作保证对引用计数操作的原子性和可见性
  • 无法回收环形数据结构
  • 内存开销大每个对象都需要引入额外内存空间存储引用计数
  • 回收内存时依旧可能引发暂停
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“【青训营】性能优化和自动内存管理” 的相关文章