App内存优化

286 阅读2分钟

内存问题

  • 内存抖动:内存曲线锯齿状,GC导致卡顿。
  • 内存泄漏:可用内存减少,频繁GC。
  • 内存溢出:OOM,程序异常。

工具选择

  • Memory Profiler

    • 实时图表展示应用内存使用量。
    • 识别内存泄漏,抖动等。
    • 提供捕获堆转储,强制GC以及追踪内存分配的能力。
    • 优点:方便直观,线下平时使用。
    • 官网教程
  • Memory Analyzer

    • 强大的Java Heap分析工具,查找内存泄漏及内存占用。
    • 生成整体报告,分析问题等。
    • 线下深入使用(Memory Profiler初步断定问题,Memory Analyzer 深入分析)。
  • LeakCanary

内存管理

Java内存管理

Android内存管理

内存抖动

  • 定义:内存频繁分配和回收导致内存不稳定。
  • 表现:频繁GC,内存曲线呈锯齿状。
  • 危害:导致卡顿,OOM(频繁创建对象,导致内存不足及碎片(不连续)不连续的内存片无法被分配,导致OOM)。
  • 解决技巧:找循环或者频繁调用的地方。
  • 案例:Android 性能优化 - 彻底解决内存抖动

内存泄漏

  • 定义:内存中存在已经没有用的对象。
  • 表现:内存抖动(可用内存少,导致频繁GC),可用内存诼渐减少。
  • 危害:内存不足,GC频繁,OOM。
  • 案例:利用Android Studio、MAT对Android进行内存泄漏检测
  • 总结:使用Memory Profiler初步观察,通过Memory Analyzer结合代码确认。

ARTHook 优雅检测不合理图片

  • 第一个参考链接整理的有,就偷个懒了。开心 可爱 害羞 微笑 满意 嗯嗯

优化大方向

  • 内存泄漏
  • 内存抖动
  • Bitmap

优化细节

  • LargeHeap属性(尽量打开)。
  • onTrimMemory。
  • 使用优化过的集合:SparseArray。
  • 谨慎使用SharedPreference。

参考: