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

内存问题

在这里插入图片描述

内存检测工具

在这里插入图片描述

Memory Profiler

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

Memory Analyzer-MAT(堆转储)

在这里插入图片描述
java heap分析工具
dump一下heap,保存为文件,用hprof-conv转化
Histogram-搜索MemoryLeak,右键MemoryLeakActivity,
ListObject-with incoming reference-path to gc root

内存分配

Java内存分配

在这里插入图片描述

Java内存回收算法

  • 标记-清除算法(标记和清除效率不高,产生大量不连续的内存碎片)
    在这里插入图片描述
  • 复制算法(浪费一半空间 )
    • 将内存划分为大小相等的两块
    • 一块内存用完之后复制存活对象到另一块
    • 清理另外一块内存
      在这里插入图片描述
  • 标记-整理算法(内存连续避免标记-清理导致的内存碎片,避免复制算法的空间浪费)
    在这里插入图片描述
  • 分代收集算法
    在这里插入图片描述

Android内存管理机制

在这里插入图片描述

Low Memory Killer

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

ARTHook优雅检测不合理图片

在这里插入图片描述
26之后相当于java层销毁后很快能通知Native层去销毁

在这里插入图片描述
放在资源目录的话算内存还要考虑压缩比例
在这里插入图片描述
在这里插入图片描述
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比较麻烦,上传失败率搞,分析困难)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ps:
    LeakCanary定制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值