内存优化
# 内存优化
# 自动化半自动化监测
大图内存和流量-BitmapCanary,doreamonkit,hook内存分配方法
内存泄露监控和上报-leakcanary,stricmode,as
内存曲线-as,doreamonkit
线程监控
# 低内存监控
# 参考
深入探索Android内存优化 (opens new window)
# 总结
对于内存优化的专项优化而言,我们要着重注意两点,即优化大方向和优化细节。
对于优化的大方向,我们应该优先去做见效快的地方,主要有以下三部分:
- 1、内存泄漏
- 2、内存抖动
- 3、Bitmap
对于优化细节,我们应该注意一些系统属性或内存回调的使用等等,如下:
- 1、LargeHeap属性
- 2、onTrimMemory
- 3、使用优化过后的集合:如SparseArray
- 4、谨慎使用SharedPreference
- 5、谨慎使用外部库
- 6、业务架构设计合理
在本篇文章,我们除了建立了内存的监控闭环这一核心体系之外,还是实现了以下组件:
- 1、实现了线下的native内存泄漏监控
- 2、根据设备分级来使用不同的内存和分配回收策略。
- 3、针对低端机做了功能或图片加载格式的降级处理。
- 4、针对缓存滥用的问题实现了统一的缓存管理组件。
- 5、实现了大图监控和重复图片的监控。
- 6、在前台每隔一定时间去获取当前应用内存占最大内存的比例,当超过设定阈值时则主动释放应用cache。
- 7、当UI隐藏时释放内存以增加系统缓存应用进程的能力。
- 8、高效实现了应用全局内的Bitmap监控。
- 9、实现了全局的线程监控
- 10、针对内存使用的重度场景实现了GC监控。
最后,当监控到应用内存超过阈值时,还定制了完善的兜底策略来重启应用进程。
从性能分类的纬度来看,除了内存监控方面外,是否也同样建立了卡顿、缓存、电量、异常流量、布局、包体积、IO、存储相关的监控与优化体系。总的来说,要想实现更健全的功能、更深层次的定位问题、线上问题快速准确的发现,还是有很多事情可以做的。
# 工具
除了常用的内存分析工具Memory Profiler、MAT、LeakCanary之外
https://github.com/Tencent/matrix/wiki/Matrix-Android-ResourceCanary
https://github.com/facebookarchive/device-year-class
LeakInspector-https://www.jianshu.com/p/4646b364ad17 未开源
https://github.com/smallnew/BitmapCanary
大图检测: https://www.bookstack.cn/read/DoraemonKit-3.0/05e002158a0d0a66.md
# 自动化思路
Leakcanary->stacktrace栈构建exception->上报到统计平台如firebase,友盟,sentry,bugly