一、简介
Profiler Memory是AndroidStudio自带的内存分析小工具,可以在Profiler打开Memory内存分析模块,官方文档地址
image.png二、Profiler Memory使用和分析
图形控制面板介绍
image.png
Memory Profiler 的默认视图包括以下各项:
- 用于强制执行垃圾回收事件的按钮。
- 用于捕获堆转储的按钮。
注意:只有在连接到搭载 Android 7.1(API 级别 25)或更低版本的设备时,才会在堆转储按钮右侧显示用于记录内存分配的按钮。 - 用于指定分析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在分析时提高应用性能。
- 用于缩放时间轴的按钮。
- 用于跳转到实时内存数据的按钮。
- 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
- 内存使用量时间轴,它会显示以下内容:
- 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示。
- 一条虚线,表示分配的对象数,如右侧的 y 轴所示。
- 每个垃圾回收事件的图标。
其中类型划分包三种方式:
class类型、package包名、callstack调用栈
,我这边这里使用包名
划分的方式方便我们快速定到我们项目代码中那个关键位置占用内存比较多,可以有针对性去快速分析;堆的类型划分:(app heap)应用分配的内存,(image heap)系统启动镜像,启动期间预加载的类,这部分的分配保证不会移动和消失,(zygote heap)孵化器的堆,应用进程就是从孵化器fork而来,内存也相应的fork一份 image.png
如上图:我们可以知道com开头的包名占用的内存情况
-
Allocations
已分配使用的内存大小 -
Native Size
对象类型使用的的原生内存大小 -
Shallow Size
对象类型使用的Java内存大小 -
Retained Size
保留的内存大小
三、案例
分析应用中Activity
和Fragment
实例存在内存泄漏的数据
过滤器显示数据类型包括:
- 已销毁但仍然被引用的Activity实例
-
没有有效的FragmentManager但仍被应用的Fragment实例
image.png
内存问题类型:
- 1.内存泄漏 :观察Heap Size/Allocations内存情况,多次操作后,只要data object的total size是稳定的某个值,这么说明没有内存泄漏,如果发现它在每次GC后,都在增长,不管是慢增长还是快增长,都说明内存泄漏的可能性。
- 2.内存抖动:
因为内存抖动的时候,会频繁发生GC,不需要手动触发GC,都能看到数据的频繁更新。
网友评论