本文主要是介绍Android Studio Profiler内存检测,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Profiler 模块说明
1.Android Profiler 显示当前正在剖析的进程和设备。
2在 Sessions 窗格中,选择要查看的会话,或启动一个新的剖析会话。
3.使用缩放按钮控制要查看的时间轴范围,或使用 Attach to live 按钮跳转到实时更新。
4.事件时间轴显示与用户输入相关的事件,包括键盘活动、音量控制变化和屏幕旋转。
5.共享时间轴视图,包括 CPU、内存、网络和耗电量图表。
Memory Profiler 模块说明
- 用于强制执行垃圾回收事件的按钮。
- 用于捕获堆转储的按钮。
注意:只有在连接到搭载 Android 7.1(API 级别 25)或更低版本的设备时,才会在堆转储按钮右侧显示用于记录内存分配的按钮。
- 用于指定性能剖析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在性能剖析时提高应用性能。一般使用默认就行。
- 用于缩放时间轴的按钮。
- 用于跳转到实时内存数据的按钮。
- 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
- 内存使用量时间轴,它会显示以下内容:
-
- 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示。
- 一条虚线,表示分配的对象数,如右侧的 y 轴所示。
- 每个垃圾回收事件的图标。
内存计数说明
- Java:从 Java 或 Kotlin 代码分配的对象的内存。
- Native:从 C 或 C++ 代码分配的对象的内存。
即使您的应用中不使用 C++,您也可能会看到此处使用了一些原生内存,因为即使您编写的代码采用 Java 或 Kotlin 语言,Android 框架仍使用原生内存代表您处理各种任务,如处理图像资源和其他图形。
- Graphics:图形缓冲区队列为向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存。(请注意,这是与 CPU 共享的内存,不是 GPU 专用内存。)
- Stack:应用中的原生堆栈和 Java 堆栈使用的内存。这通常与您的应用运行多少线程有关。
- Code:应用用于处理代码和资源(如 dex 字节码、经过优化或编译的 dex 代码、.so 库和字体)的内存。
- Others:应用使用的系统不确定如何分类的内存。
- Allocated:您的应用分配的 Java/Kotlin 对象数。此数字没有计入 C 或 C++ 中分配的对象。
(1)查看内存分配
内存分配为显示内存中的每个 Java 对象和 JNI 引用如何分配。内存性能分析器可显示有关对象分配的以下信息:
- 分配了哪些类型的对象以及它们使用多少空间。
- 每个分配的堆栈轨迹,包括在哪个线程中。
- 对象在何时被取消分配(仅当使用搭载 Android 8.0 或更高版本的设备时)。
如果使用的是 Android 8.0 或更高版本,可以随时查看对象分配,具体操作步骤如下:在时间轴上拖动以选择要查看哪个区域的分配。
如果使用的是 Android 7.1 或更低版本,请点击内存性能分析器工具栏中的 Record memory allocations 录制图标。记录时,内存性
能分析器会跟踪您的应用中发生的所有分配。完成后,点击 Stop recording 图标 。
如需检查分配记录,请按以下步骤操作:
- 浏览列表以查找堆计数异常大且可能存在泄露的对象。
- 在 Instance View 窗格中,点击一个实例。此时下方将出现 Call Stack 标签页,显示该实例被分配到何处以及在哪个线程中。
- 在 Call Stack 标签页中,右键点击任意行并选择 Jump to Source,以在编辑器中打开该代码。
(2)捕获堆转储
堆转储显示在捕获堆转储时您的应用中哪些对象正在使用内存。特别是在长时间的用户会话后,堆转储会显示您认为不应再位于内存中却仍在内存中的对象,从而帮助识别内存泄露。
捕获堆转储后,可以查看以下信息:
- 您的应用分配了哪些类型的对象,以及每种对象有多少。
- 每个对象当前使用多少内存。
- 在代码中的什么位置保持着对每个对象的引用。
- 对象所分配到的调用堆栈。(目前,对于 Android 7.1 及更低版本,只有在记录分配期间捕获堆转储时,才会显示调用堆栈的堆转储。)
点击内存性能分析器工具栏中的 Dump Java heap 图标捕获堆转储 。
在类列表中查看以下信息:
- Allocations:堆中的分配数。
- Native Size:此对象类型使用的原生内存总量(以字节为单位)。只有在使用 Android 7.0 及更高版本时,才会看到此列(如 Bitmap)使用原生内存。
- Shallow Size:此对象类型使用的 Java 内存总量(以字节为单位)。
- Retained Size:为此类的所有实例而保留的内存总大小(以字节为单位)。
点击一个类名称可在右侧打开 Instance View 窗口列出的每个实例都包含以下信息:
- Depth:从任意 GC 根到选定实例的最短跳数。
- Native Size:原生内存中此实例的大小。 只有在使用 Android 7.0 及更高版本时,才会看到此列。
- Shallow Size:Java 内存中此实例的大小。
- Retained Size:此实例所支配内存的大小。
如需检查堆,请按以下步骤操作:
- 浏览列表以查找堆计数异常大且可能存在泄露的对象
- 在 Instance View 窗格中,点击一个实例。此时下方将出现 References 标签页,显示对该对象的每个引用。
- 在 References 标签页中,如果发现某个引用可能在泄露内存,请右键点击它并选择 Go to Instance。这样会从堆转储中选择相应的实例,从而向显示它自己的实例数据。
(3)泄露检测
在内存性能分析器中分析堆转储时,可以过滤 Android Studio 认为可能表明应用中的 Activity 和 Fragment 实例存在内存泄露的分析数据。
过滤器显示的数据类型包括:
- 已销毁但仍被引用的 Activity 实例。
- 没有有效的 FragmentManager 但仍被引用的 Fragment 实例
这篇关于Android Studio Profiler内存检测的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!