Android 性能优化技术月报 | 2023 年 7 月
每个月都会有一些 Android 性能优化相关的优质内容发布,然而,碎片化阅读使得这些知识难以形成完整体系,且容易被遗忘。为解决这些问题,我决定尝试使用技术月报的形式,总结我在最近一个月内查阅的 Android 性能优化相关的优质内容。
月报的主要内容包括:整理展示我在最近一个月所查阅的 Android 性能优化领域的最新技术动态、精选博客,精选视频等内容。
最新动态
btrace 2.0 发布
btrace 是字节开源的高性能 Trace 工具,比起 systrace 或者 profile 要好用很多,目前 btrace 2.0 版本已发布,主要包括以下升级
- 使用体验:支持 Windows 啦!此外将脚本实现从 Python 切至 Java 并去除各种权限要求,因脚本工具可用性问题引起的用户使用打断次数几乎降为 0,同时还将 Trace 产物切至 PB 协议,产物体积减小 70%,网页打开速度提升 7 倍!
- 性能体验:通过大规模改造方法 Trace 逻辑,将 App 方法 Trace 底层结构由字符串切换为整数,实现内存占用减少 80%,存储改为 mmap 方式、优化无锁队列逻辑、提供精准插桩策略等,百万量级方法全插桩下性能损耗进一步降低至 15%!
- 监控数据:新增 4 项数据监控能力,重磅推出渲染详情采集能力!同时还新增 Binder、线程启动、Wait/Notify/Park/Unpark 等详情数据!
精选博客
百度App启动性能优化实践篇
本系列文章介绍了百度 App 启动优化的经验,将低端机启动性能优化拆分为了观测设施、基础设施和业务优化 3 个子方向,总得来说,是一份不可多得的系统化的启动优化指南
- 观测设施:建设低端机标准,建设启动性能衡量指标;建设线上、线下防劣化机制,实现线下随版的性能问题前置和线上问题的自动化分析与归因;
- 基础设施:三驾马车,高效性能工具、高性能组件、调度框架。高效性能工具主要包括Trace/Hook/TimeProfiler,服务于快速发现并自动化性能问题;高性能组件主要优化手-百基础性能并赋能业务,突破系统约束与瓶颈,建设行业内领先的基础设施;调度机制作为优化的核心手段,业务初始化任务可通过接入调度器快速实现性能优化;
- 业务优化:根据工具输出性能问题,协同业务优化不规范耗时、不合理“预”,初始化任务通过接入调度框架方式达到优化效果。
Android 视角谈 Bazel 与 Gradle 构建系统
Android 视角谈 Bazel 与 Gradle 构建系统
Bazel 是 Google 所开源的一款构建系统,其在 Google 内部用于支持超大规模(TB 级别)的仓库构建,这充分证明了 Bazel 构建系统卓越的性能表现。虽然现阶段大多数人可能不会用到 Bazel,但也可以了解一下,开阔视野。
本文首先从构建系统设计和理念的角度对 Bazel 和 Gradle 进行了深度的对比,然后围绕 Android 构建方面的表现从性能和生态两个角度进行了阐述,总得来说
- 性能角度:对于超大型或者巨型工程来讲,Bazel 因其优秀的设计理念而上限更高。但这个超大型工程的定义,据作者测算,大概量级是在抖音 Android 现有规模的 2-3 倍左右,而现有规模的项目 Gradle 经过优化的表现依然有着较大的承载空间。
- 生态角度:Bazel 在当前 Android 构建领域不够完善且缺乏官方支持,比如 AGP,KGP 等官方插件对应到 Bazel 只能依赖于社区维护,长期来看,是否能让生态成长起来还有较大的不确定性。
Android CPU 性能优化的一些思路
想要做好性能优化,本质上就是要求我们在操作系统层和应用层对如何利用 CPU 和存储器进行优化,本文主要介绍了 CPU 性能优化的一些思路
- 减少程序指令数
- 利用 CPU 闲置时间
- 减少 CPU 等待
- 降低时钟周期时间
- 降低每条指令的平均时间周期
- 提升任务调度优先级
Android 内存优化之极致清理
小米小组件审核要求进程内存占用 PSS 必须小于 35M,本文介绍了作者将小组件进程 PSS 占用从 135M 降低到 35M 的过程,如果你也在做小组件的内存优化,本文应该对你很有帮助
内存认知ReMake
本文图文并茂地介绍了 Android 内存相关的一些知识点,主要包括以下内容
- 手机硬件上的内存
- 为什么内存不能爆满
- app 运行时内存结构
- 物理内存和虚拟内存
- 其它的一些常见问题分享
Android 内存占用常用分析方法
做优化相关的工作,最重要的就是要有可以量化的指标。所以我们先要知道哪些可以衡量系统占用内存的方法和工具。本文介绍了一些查看内存占用情况的方法和工具:
- dumpsys meminfo
- procrank
- /proc/pid/maps
- /proc/pid/smaps
- /proc/meminfo
- PageMap
- ion
- Kernel used
- Kernel reserved
- MAT
- malloc_debug
精选视频
理解 Android ART 虚拟机
本视频主要分享了 ART 虚拟机堆的组成和创建,对象申请和释放流程,以及堆内存优化等内容:
社区活动
货拉拉移动技术开放日
货拉拉移动技术开放日,分享内容如下:
- Android 功耗监控与优化实践
- 货拉拉云真机平台的演进与实践
- Android 出海应用开发那些事
- APP 动态化路由设计与实践
- 货拉拉 iOS 端路由框架开源
- AI技术在反馈中的探索与应用
- 未来已来!探索移动端新的机遇与挑战