美文网首页
Android性能优化—Profiler Memory使用

Android性能优化—Profiler Memory使用

作者: momxmo | 来源:发表于2020-09-15 19:43 被阅读0次

一、简介

Profiler Memory是AndroidStudio自带的内存分析小工具,可以在Profiler打开Memory内存分析模块,官方文档地址

image.png

二、Profiler Memory使用和分析

图形控制面板介绍


image.png

Memory Profiler 的默认视图包括以下各项:

  1. 用于强制执行垃圾回收事件的按钮。
  2. 用于捕获堆转储的按钮。
    注意:只有在连接到搭载 Android 7.1(API 级别 25)或更低版本的设备时,才会在堆转储按钮右侧显示用于记录内存分配的按钮。
  3. 用于指定分析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在分析时提高应用性能
  4. 用于缩放时间轴的按钮。
  5. 用于跳转到实时内存数据的按钮。
  6. 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
  7. 内存使用量时间轴,它会显示以下内容:
    • 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示。
    • 一条虚线,表示分配的对象数,如右侧的 y 轴所示。
    • 每个垃圾回收事件的图标。
image.png
其中类型划分包三种方式:class类型、package包名、callstack调用栈,我这边这里使用包名划分的方式方便我们快速定到我们项目代码中那个关键位置占用内存比较多,可以有针对性去快速分析;
堆的类型划分:(app heap)应用分配的内存,(image heap)系统启动镜像,启动期间预加载的类,这部分的分配保证不会移动和消失,(zygote heap)孵化器的堆,应用进程就是从孵化器fork而来,内存也相应的fork一份 image.png

如上图:我们可以知道com开头的包名占用的内存情况

  • Allocations已分配使用的内存大小
  • Native Size对象类型使用的的原生内存大小
  • Shallow Size对象类型使用的Java内存大小
  • Retained Size 保留的内存大小

三、案例

分析应用中ActivityFragment实例存在内存泄漏的数据

过滤器显示数据类型包括:

  • 已销毁但仍然被引用的Activity实例
  • 没有有效的FragmentManager但仍被应用的Fragment实例


    image.png

内存问题类型:

  • 1.内存泄漏 :观察Heap Size/Allocations内存情况,多次操作后,只要data object的total size是稳定的某个值,这么说明没有内存泄漏,如果发现它在每次GC后,都在增长,不管是慢增长还是快增长,都说明内存泄漏的可能性。
  • 2.内存抖动:
    因为内存抖动的时候,会频繁发生GC,不需要手动触发GC,都能看到数据的频繁更新。

相关文章

网友评论

      本文标题:Android性能优化—Profiler Memory使用

      本文链接:https://www.haomeiwen.com/subject/svrdektx.html