天天看点

Android 性能优化工具之 Memory Profiler

简介

Memory Profiler 是 Android Profiler 中的一个组件,可帮助您识别可能会导致应用卡顿、冻结甚至崩溃的内存泄露和内存抖动。它显示一个应用内存使用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。

官方文档

参考:使用 Memory Profiler 查看 Java 堆和内存分配

为什么使用内存分析器

Android 提供了一个托管内存环境——当它确定你的应用不再使用某些对象时,垃圾收集器会将未使用的内存释放回堆。在所有 Android 版本的某个点上,系统必须短暂地暂停代码。大多数时候,停顿是不可察觉的。但是,如果你的应用程序分配内存的速度快于系统收集的速度,你的应用程序可能会被延迟,而收集器释放了足够的内存来满足你的分配。延迟可能会导致应用程序跳过帧并导致明显的慢速。

即使你的应用程序没有表现出缓慢,如果它泄露了内存,它仍然可以保留那个内存,即使它在后台。通过强制不必要的垃圾收集事件,这种行为可以降低系统内存性能的其他部分。最终,系统不得不杀死你的应用程序来回收内存。然后当用户返回到你的应用程序时,它必须重新启动。

为了帮助防止这些问题,您应该使用内存分析器来执行以下操作:

在可能导致性能问题的时间轴中寻找不良的内存分配模式

Dump Java 堆,以便在任何时间查看哪些对象正在使用内存。长时间的堆转储可以帮助识别内存泄漏。

在正常和极端的用户交互过程中记录内存分配,以精确地确定您的代码在短时间内分配的对象或分配被泄漏的对象。

有关可以减少应用程序内存使用的编程实践的信息,请参阅管理应用程序的内存。

内存分析器概述

Android 性能优化工具之 Memory Profiler
  1. 用于强制执行垃圾回收事件的按钮。
  2. 用于捕获堆转储的按钮。

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

  3. 用于指定分析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在分析时提高应用性能。
  4. 用于缩放时间轴的按钮。
  5. 用于跳转到实时内存数据的按钮。
  6. 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
  7. 内存使用量时间轴,它会显示以下内容:
  • 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示。
  • 一条虚线,表示分配的对象数,如右侧的 y 轴所示。
  • 每个垃圾回收事件的图标。