- content
{:toc}
前言
不管是做什么优化都要先找到root cause,然后分析,最后执行方案。
内存优化也不例外。
我们可以从下面的几个入手点来找root cause
- 代码逻辑
- 模拟用户操作,查看内存占用较高的点,分析HeapDump
- 页面退出后,分析HeapDump
分析HeapDump可以参考
- DominatorTree,确定占用内存最多的实例
- 通过 GC root辅助分析内存占用的来源
- 通过 RetainHeapSize 量化的分析内存占用
如果条件允许,建议加入bug管理平台。出现问题,及时回传到服务器(例如腾讯的Bugly平台等)
内存分析
1. 代码逻辑检查
把各个模块的代码逻辑检查,看是否有无用的内存消耗
2. 内存主动检查
- 提前加载的数据,实际上还没用
- UI 相关数据,没有及时释放。比如大量的临时view,动画等
- 数据结构不合理,占用内存过多。比如大量的重复临时数据,无效数据等
- 图片占用内存过多。比如图片
3. bug
有些潜在的bug可能会导致内存占用过多,甚至出现OOM.
这个就需要测试,或用户回馈才能查到。
建议app做一些压力测试(比如人工压力测试,Monkey压力测试等)
页面退出
页面完全退回后,原则上需要释放到资源
我们可以设置开发者选项开启“不保留活动”,强制GC后,分析HeapDump。
看图中位释放的资源是否都是必要的。
HeapDump分析
看图中allocate的memory是否都是现在page要用到的。检查每一项的合理性