Android
分析¶
分析思路¶
- 静息态内存分析(优化app在后台时的内存,防止被llk):做内存分析,统计大图加载;动画播放;内存泄露;数据结构不合理
- 运行时动态内存分析(优化OOM问题):
分析工具¶
mat 的坑
- android hprof 转为mat hprof:hprof-conv android.hprof mat.hprof
- 新版mat必须支持jdk11 ,在ini文件首行配置:
window: -vm D:/android-studio/jre/bin/javaw.exe macos: -vm /Applications/dev/Android Studio.app/Contents/jre/Contents/Home/bin
内存优化¶
- 设备分级
- 设备分级:对于低端设备可以关闭动画;使用RBG_565
- 缓存管理:设计一套统一的缓存管理机制
- 进程模型:一个空进程占用10m,减少应用启动的进程数,减少常驻进程
- 安装包大小:推出lite版app
- 图片优化
- 统一图片库:低端机使用使用RBG_565、更加严格的缩放算法,使用Glide、Fresco
- 统一监控:大图监控(图片长度超过View的大小,及时弹出提醒弹窗,超宽率)、重复图片监控(bitmap的像素完全相同,但是有多个对象存在,通过Hprof分析检测)、图片总内存(更加不同系统、屏幕分辨率等不同维度统计图片占用的内存,便于在oom知道图片内存占用量)
- 内存泄漏:同一个对象泄漏、新对象泄漏。 1.java内存泄漏:难做线上监控,因为hprof内存快照文件太大,可以对其进行裁剪压缩。比如一个 100MB 的文件裁剪后一般只剩下 30MB 左右,使用 7zip 压缩最后小于 10MB,增加了文件上传的成功率。 2.oom监控:美团的Probe,风险较大,可能会造成二次崩溃 3.native内存监控:malloc debug or malloc hook,不稳定 4.针对无法重编 so 的情况:针对可重编的 so 情况
内存监控¶
案例¶
- 静态变量持有短生命的对象
- 单例模式导致
- 无限循环属性动画导致。