android memory.java_使用Android Memory Profiler

Memory Profiler是Android Profiler中的一个组件,它可以帮助您识别内存泄漏和可能导致卡顿、冻结甚至应用程序崩溃的内存抖动。它显示一个应用程序内存使用的实时图表,并允许你抓取堆栈信息、强行垃圾收集和跟踪内存分配。

要打开Memory Profiler,请执行以下步骤:

单击View > Tool Windows > Profiler(也可以单击工具栏中的Profile图标)。

从Android Profiler工具栏中选择要分析的设备和应用程序进程。如果已通过USB连接设备,但未看到列出的设备,请确保已启用USB调试。

单击MEMORY时间轴中的任意位置打开Memory Profiler。

为什么要分析应用程序内存

Android提供了一个托管内存环境,当它确定应用程序不再使用某些对象时,垃圾收集器会将未使用的内存释放回堆中。Android寻找未使用内存的方式正在不断改进,但在所有Android版本中,系统必须短暂暂停代码。大多数时候,停顿是不被感知的。但是,如果应用程序分配内存的速度快于系统回收内存的速度,则应用程序可能会发生延迟,等待回收器释放足够的内存以满足分配。延迟可能导致应用程序发生跳帧并导致明显变慢。

即使你的应用程序并没有表现出缓慢,但如果它泄露了内存,即使运行在后台也可以占用内存。此行为会导致垃圾回收事件被强制执行,从而降低系统的其余内存性能。最后,系统可能被迫终止应用程序进程以回收内存。因此当用户返回到此应用程序时,它必须完全重新启动。

为了帮助防止这些问题,您应该通过以下操作使用Memory Profiler进行检查:

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

抓取Java堆来查看在任何给定时间哪些对象正在耗尽内存。在一段较长的时间内多次抓取堆信息有助于识别内存泄漏。

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

Memory Profiler概述

当您第一次打开Memory Profiler时,您将看到应用程序的内存使用的详细时间轴,和可以使用的内存工具包括强制垃圾回收、抓取堆信息和记录内存分配。

6b85e297cad1113729a1760a6ab4cb1d.png

如上图所示,Memory Profiler的默认视图包括以下内容:

强制垃圾回收事件的按钮。

抓取堆信息的按钮。注意:仅当连接到运行Android7.1(API级别25)或更低版本的设备时,堆信息按钮右侧才会显示一个用于记录内存分配的按钮。

用于设置Profiler捕获内存分配的频率的下拉菜单。选择适当的选项可以帮助您在分析时提高应用程序性能。

用于放大/缩小时间轴的按钮。

一个跳转到实时内存数据的按钮。

事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。

内存使用时间轴,包括以下内容:

由每一个内存类别使用多少内存的堆叠图,如左边的Y轴和顶部的颜色键所指示的。

虚线表示分配的对象的数目,如右边的y轴所示。

每个垃圾回收事件的图标。

但是,如果您使用的是运行Android 7.1或更低版本的设备,默认情况下并非所有分析数据都可见。如果您看到一条消息,上面写着“Advanced profiling is unavailable for the selected process”,则需要启用高级分析才能看到以下内容:

事件时间轴

分配的对象数

垃圾回收事件

在Android 8.0及更高版本上,高级分析在可调试的应用程序上始终开启。

如何计算内存

你在Memory Profiler顶部看到的数字基于您的应用通过Android 系统提交的所有私有内存页面。此计数不包括与系统或其他应用程序共享的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值