初识性能优化及工具| 青训营笔记

202 阅读3分钟

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

一、本堂课重点内容:

本次课程主要介绍了4个问题:

1.为什么要做性能优化?

2.性能优化是什么?

3.最佳性能工具选型

4.如何做性能优化

二、详细知识点介绍:

1.为什么要做性能优化? 是因为性能优化带来体验的改善进而帮助业务指标的提升,

从更长的时间范围来看:

  • 硬件性能提升速度变缓
  • ARM平台受益于架构和工艺的演进,最近几年趋势比X86平台好

未来?

  • ·未来会有新的材料和工艺来驱动芯片性能的进—步提升,但是目前还没有成熟
  • ·移动处理器还受到电池技术的限制
  • ·软件的性能优化仍可持续带来提升

2.性能优化是什么?

  • 2.1流畅性优化 快-极致的响应与流畅的体验
  • 2.2资源优化 省-最小负载带来最大的收益
  • 2.3稳定性优化 稳-稳定的实现.减少不必要打断
  • 2.4系统级优化 拓展-底层booster

资源:Android手机的软件和硬件资源通俗意义上应用依赖的移动终端的有限资凉和系统设置的数值,即功耗、存储、流量、系统参数、 CPU、 内存等。

ANR是 (Application Not Responding)的缩写,即应用程序无响应。如果Android应用的界面线程处于阻塞状态的时间过长,会触发App ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR对话框会为用户提供强行退出应用或等待的选项。

3.最佳性能工具选型 性能监控价值

  • 监控和优化相生相伴
  • 监控有攻也有防
  • 攻是为了发现现有问题,指导优化方向
  • 防是为了发现劣化问题,及时止损
  • 线上监控发现问题并聚合排序,线下监控作为
  • 线上辅助,并发版前置发现问题

CPU Profiler 原理:基于JVMTI 优点:完整的方法调用栈输出、支持Java、C、C++方法耗时检测、上手简单缺点:性能损耗太大

btrace (aka rhea)-进阶

  1. rhea-systrace:全函数插桩,自动生成Trace代码,对层数做限制,性能损耗50%
  2. rhea-mtrace:全函数插桩,抛弃systrace,自己统计函数耗时,最后数据展现同systrace
  3. rhea-atrace:优化systrace性能,聚合更多性能数据:类加载、Lock、IO等

4.如何做性能优化

4.1现状分析:掌握问题根源,才能彻底解决问题

4.2优化策略:性能优化实践案列分享

现状分析——耗时成因

  1. CPU Time 循环,反射,序列化/反序列化,类解析
  2. lo Wait IO操作,等待IO返回结果
  3. lPC Binder调用耗时
  4. Lock Wait 主线程是等锁状态,等待其他线程或者自己超时唤醒
  5. CPU Schedule 主线程是可执行状态,但是获取不到CPU时间片

抖音解决方案: AndInflater:解决xml性能问题-外界方案X2C.LegoInflate:高优先级的启动预加载方案 .AsyncInflater:随时随地预加载,不与具体逻辑绑定,生命周期存活,自定义清理周期

三、实践练习例子:

image.png 有SurfaceView,Jetpck Compose,Litho

image.png

四、课后个人总结:

本次课程学习了很多性能优化的方法和工具的知识,有些地方比较难掌握比如4.如何做性能优化这一点中的知识比较多,比较杂,还有就是只有洞察程序内部的瓶颈,层层剥离,最终才能发现问题根源,还要继续保持学习。