Android Studio Profiler内存检测

Profiler 模块说明

 

1.Android Profiler 显示当前正在剖析的进程和设备。
2在 Sessions 窗格中,选择要查看的会话,或启动一个新的剖析会话。
3.使用缩放按钮控制要查看的时间轴范围,或使用 Attach to live 按钮跳转到实时更新。
4.事件时间轴显示与用户输入相关的事件,包括键盘活动、音量控制变化和屏幕旋转。
5.共享时间轴视图,包括 CPU、内存、网络和耗电量图表。

 

Memory Profiler 模块说明

 

  1. 用于强制执行垃圾回收事件的按钮。
  2. 用于捕获堆转储的按钮。

注意:只有在连接到搭载 Android 7.1(API 级别 25)或更低版本的设备时,才会在堆转储按钮右侧显示用于记录内存分配的按钮。

  1. 用于指定性能剖析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在性能剖析时提高应用性能。一般使用默认就行。
  2. 用于缩放时间轴的按钮。
  3. 用于跳转到实时内存数据的按钮。
  4. 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
  5. 内存使用量时间轴,它会显示以下内容:
    • 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 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 图标 。
如需检查分配记录,请按以下步骤操作:

  1. 浏览列表以查找堆计数异常大且可能存在泄露的对象。
  2. 在 Instance View 窗格中,点击一个实例。此时下方将出现 Call Stack 标签页,显示该实例被分配到何处以及在哪个线程中。
  3. 在 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:此实例所支配内存的大小。


如需检查堆,请按以下步骤操作:

  1. 浏览列表以查找堆计数异常大且可能存在泄露的对象
  2. 在 Instance View 窗格中,点击一个实例。此时下方将出现 References 标签页,显示对该对象的每个引用。
  3. 在 References 标签页中,如果发现某个引用可能在泄露内存,请右键点击它并选择 Go to Instance。这样会从堆转储中选择相应的实例,从而向显示它自己的实例数据。

 

(3)泄露检测
在内存性能分析器中分析堆转储时,可以过滤 Android Studio 认为可能表明应用中的 Activity 和 Fragment 实例存在内存泄露的分析数据。
过滤器显示的数据类型包括:

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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio Profiler是一个工具,它可以帮助开发者实时监测和分析Android应用程序的性能和资源使用情况。它是从Android Studio 3.0版本开始替代了之前的Android Monitor工具。 Android Profiler工具提供了几个主要的模块,包括CPU Profiler、Memory Profiler、Network Profiler和Energy Profiler。这些模块可以帮助开发者深入了解应用的CPU占用、内存使用、网络请求和电池消耗等方面的情况,从而帮助开发者优化应用的性能和资源管理。 使用Android Studio Profiler,开发者可以实时监测应用程序在不同时间点的性能指标,并通过图表和统计数据直观地展示出来。开发者可以使用Profiler工具来检测性能问题,识别内存泄漏,优化代码,提高应用的响应速度和效率。 总结来说,Android Studio Profiler是一个强大的工具,它可以帮助开发者分析和优化Android应用程序的性能和资源使用情况。通过使用Profiler工具,开发者可以更好地了解应用的性能瓶颈,并采取相应的措施来改进应用的质量和用户体验。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [androidStudio之性能分析器profiler](https://blog.csdn.net/lanhuayushen/article/details/104194194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [浅析AndroidStudio3.0最新 Android Profiler分析器(cpu memory network 分析器)](https://download.csdn.net/download/weixin_38740144/12767738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值