Android性能分析与优化笔记 - 4 内存优化

内存问题

Android性能分析与优化笔记 - 4 内存优化_第1张图片

内存检测工具

Android性能分析与优化笔记 - 4 内存优化_第2张图片

Memory Profiler

Allocations 分配了多少对象
Shallow Size 我自己的大小
Retained Size 支配的大小
点击实例后 Allocation Call Stack 创建对象的位置

Memory Analyzer-MAT(堆转储)

Android性能分析与优化笔记 - 4 内存优化_第3张图片
java heap分析工具
dump一下heap,保存为文件,用hprof-conv转化
Histogram-搜索MemoryLeak,右键MemoryLeakActivity,
ListObject-with incoming reference-path to gc root

内存分配

Java内存分配

Android性能分析与优化笔记 - 4 内存优化_第4张图片

Java内存回收算法

  • 标记-清除算法(标记和清除效率不高,产生大量不连续的内存碎片)
    Android性能分析与优化笔记 - 4 内存优化_第5张图片
  • 复制算法(浪费一半空间 )
    • 将内存划分为大小相等的两块
    • 一块内存用完之后复制存活对象到另一块
    • 清理另外一块内存
      Android性能分析与优化笔记 - 4 内存优化_第6张图片
  • 标记-整理算法(内存连续避免标记-清理导致的内存碎片,避免复制算法的空间浪费)
    Android性能分析与优化笔记 - 4 内存优化_第7张图片
  • 分代收集算法
    Android性能分析与优化笔记 - 4 内存优化_第8张图片

Android内存管理机制

Android性能分析与优化笔记 - 4 内存优化_第9张图片

Low Memory Killer

  • 进程分类(优先级由高到低,低优先级先回收)
    • 前台进程
    • 可见进程
    • 服务进程
    • 后台进程
    • 空进程
  • 回收收益(确定回收多少)

ARTHook优雅检测不合理图片

Android性能分析与优化笔记 - 4 内存优化_第10张图片
26之后相当于java层销毁后很快能通知Native层去销毁

Android性能分析与优化笔记 - 4 内存优化_第11张图片
放在资源目录的话算内存还要考虑压缩比例
Android性能分析与优化笔记 - 4 内存优化_第12张图片
Android性能分析与优化笔记 - 4 内存优化_第13张图片
https://github.com/tiann/epic
Epic 是一个在虚拟机层面、以 Java Method 为粒度的 运行时 AOP Hook 框架。简单来说,Epic 就是 ART 上的 Dexposed(支持 Android 4.0 ~ 10.0)
https://github.com/codeguyFred/MyPerformance/blob/master/app/src/main/java/com/optimize/performance/PerformanceApp.java
https://github.com/codeguyFred/MyPerformance/blob/master/app/src/main/java/com/optimize/performance/memory/ImageHook.java

线上监控

  • Debug.dumpHprofData()(Dump比较麻烦,上传失败率搞,分析困难)
    Android性能分析与优化笔记 - 4 内存优化_第14张图片
    Android性能分析与优化笔记 - 4 内存优化_第15张图片
    Android性能分析与优化笔记 - 4 内存优化_第16张图片
    ps:
    LeakCanary定制

你可能感兴趣的:(Android性能分析与优化笔记 - 4 内存优化)