内存问题
- 内存抖动:内存曲线锯齿状,GC导致卡顿。
- 内存泄漏:可用内存减少,频繁GC。
- 内存溢出:OOM,程序异常。
工具选择
-
Memory Profiler
- 实时图表展示应用内存使用量。
- 识别内存泄漏,抖动等。
- 提供捕获堆转储,强制GC以及追踪内存分配的能力。
- 优点:方便直观,线下平时使用。
- 官网教程
-
Memory Analyzer
- 强大的Java Heap分析工具,查找内存泄漏及内存占用。
- 生成整体报告,分析问题等。
- 线下深入使用(Memory Profiler初步断定问题,Memory Analyzer 深入分析)。
-
LeakCanary
- 自动内存泄漏检测。
- 线下集成。
- 案例:用 LeakCanary 检测内存泄漏
内存管理
Java内存管理
Android内存管理
- 内存弹性分配,分配值与最大值受具体设备影响。
- OOM场景:内存真正不足,可用内存不足。
- Art虚拟机回收算法可运行期选择(前台用标记-清除,后台用标记整理)。
- LowMemoryKiller : Android后台杀死系列之三:LowMemoryKiller原理(4.3-6.0)
内存抖动
- 定义:内存频繁分配和回收导致内存不稳定。
- 表现:频繁GC,内存曲线呈锯齿状。
- 危害:导致卡顿,OOM(频繁创建对象,导致内存不足及碎片(不连续)不连续的内存片无法被分配,导致OOM)。
- 解决技巧:找循环或者频繁调用的地方。
- 案例:Android 性能优化 - 彻底解决内存抖动
内存泄漏
- 定义:内存中存在已经没有用的对象。
- 表现:内存抖动(可用内存少,导致频繁GC),可用内存诼渐减少。
- 危害:内存不足,GC频繁,OOM。
- 案例:利用Android Studio、MAT对Android进行内存泄漏检测
- 总结:使用Memory Profiler初步观察,通过Memory Analyzer结合代码确认。
ARTHook 优雅检测不合理图片
- 第一个参考链接整理的有,就偷个懒了。开心 可爱 害羞 微笑 满意 嗯嗯
优化大方向
- 内存泄漏
- 内存抖动
- Bitmap
优化细节
- LargeHeap属性(尽量打开)。
- onTrimMemory。
- 使用优化过的集合:SparseArray。
- 谨慎使用SharedPreference。