首页 > 系统相关 >Android使用Profiler查看应用内存分析

Android使用Profiler查看应用内存分析

时间:2023-10-26 18:31:42浏览次数:33  
标签:查看 转储 Profiler 内存 应用 分配情况 Android

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

打开内存分析步骤: 1、依次点击View→Tool Window→Profiler 2、从Profiler工具栏中选择要分析的设备以及应用进程。(需要优先确保设备通过USB正常连接IDE) 3、点击MEMORY时间轴上的任意位置可以打开内存分析。

一、分析应用内存的目的

当应用存在不再使用的某些对象时,垃圾回收器会将未使用的内存释放。如果应用分配内存的速度比系统回收的速度快时,回收器要释放足够的内存来满足应用的分配需要时,应用可能会产生延迟,从而可能导致应用跳帧,使应用明显变慢。 即使应用使用过程中未表现出变慢,但如果存在内存泄漏,应用挂在后台运行时,依然会保留相应的内存。从而导致系统强制执行不必要的垃圾回收时间,从而拖慢系统其余部分的内存性能,最终使系统被迫终止应用进程以回收内存。致使用户返回应用时,必须重启。影响到用户体验。 因此可以通过以下几种操作从而防止这些问题: 1、在时间轴上查找可能会导致性能问题的不理想内存分配进行查看; 2、转储java堆以便查看在任何给定时间内有哪些对象在占用内存。在一个较长的时间段内进行多次堆转储有助于分析内存泄漏点,常用该种方式检测; 3、记录正常与极端情况下用户交互期间的内存分配情况。从而准确识别代码中可能存在的短时间内分配过多对象而出现泄漏的情况。

二、Profiler概览

Android使用Profiler查看应用内存分析_内存泄漏

打开Profiler后,选择设备以及应用,则可以看到时间轴界面,其中包含CPU、MEMORY、ENERGY的情况。其中MEMORY为内存分析器、ENERGY为电池分析器; 其中我们主要是用内存分析器工具。

Android使用Profiler查看应用内存分析_Android开发_02

当中有三项选择:Capture heap dump:获取堆转储,该为目前主要检测手段,稍后讲解; Record native allocations:获取设备上录制原生分配情况; Record Java/Kotlin allocations:获取录制Java和Kotlin分配情况;

三、查看内存分配情况

1、内存分配情况表可以显示内存中每个java对象和JNI引用的分配方式。因此,内存分析器可以显示有关对象分配情况信息如下: --分配了哪些类型的对象以及他们使用了多少空间; --每个分配堆栈的轨迹,包括在哪些线程中; --对象何时被取消分配等; 如果需要中Android 10以及更高版本的设备上录制原生分配情况,需要选择Record native allocations,然后点击Record,录制会持续到点击Stop为止,之后内存分析界面会转换到显示原生录制的屏幕中。

Android使用Profiler查看应用内存分析_Android_03

注意:低于android10,record native allocations选项不可使用。

如果需要录制java和kotlin分配情况,请选择record java/kotlin allocations,然后选择record。如果设备搭载的是android8+,则内存分析将可以转换显示就行录制的界面,可以按紧选中某一块区域进行查看。

Android使用Profiler查看应用内存分析_内存分配_04

四、捕获堆转储

堆转储显示捕获堆转储时应用中对象正在使用的内存,尤其是在长时间的操作中,堆转储会显示认为不应该再存在的内存对象,从而帮助识别内存泄漏。 如果需要捕获堆转储,需要选择capture heap dump,然后选择record。一段时间后,就会生成heap dump,可进行查看,也可以通过第三方工具Memory Analyzer进行查看。

Android使用Profiler查看应用内存分析_Android开发_05

由于新版IDE剔除了Memory Analyzer工具,因此,目前查看需要通过eclipse中的插件工具memory analyzer进行查看。可通过工具下载进行试验:http://www.eclipse.org/mat/downloads.php

通过工具打开phrof文件,进入主界面

Android使用Profiler查看应用内存分析_内存泄漏_06

点击leak suspects可查看疑似内存泄漏的地方,点击detail可以查看分析出ArryList存放对象Person出了问题。

Android使用Profiler查看应用内存分析_Android_07

也可以在overview中点击dominator_tree查看堆占比,可以看出一个线程占比过高,集合中对象的数量过多等。

Android使用Profiler查看应用内存分析_Android开发_08


标签:查看,转储,Profiler,内存,应用,分配情况,Android
From: https://blog.51cto.com/u_16175630/8042293

相关文章

  • Android压测测试事件行为参数对照表
    一、压测命令参数说明执行参数参数说明颗粒度指标基础参数--throttle<ms>用于指定用户操作间的时延。-s随机数种子,用于指定伪随机数生成器的seed值,如果seed值相同,则产生的时间序列也相同。多用于重测、复现问题。-v指定输出日志的级别,共有3个级别。1)-v:仅提供启动提示、测试完......
  • 悲哀!大厂门槛成了很多Android开发无法企及的追求?这个机会到底怎么获得!
    大厂offer是每个技术人的追求许多程序员都梦想着能够获得大厂的offer,这并不是饭后闲聊的话题,而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等公司的技术氛围和技术规范度,相较于一些创业型公司或小公司,显然要高得多。如果能在这类公司工作几年,对个人能力的提升无疑会非......
  • sprintf函数内存越界
    最近在做项目的时候遇到sprintf函数内存越界的问题,现在分享给大家,希望对大家有用。首先介绍了sprintf这个函数。函数原型: intsprintf(char*str,constchar*format,...);函数功能:将数据写入到str的内存空间去,可以把任何数据格式化存放到数组中。返回实际输出到str中的......
  • 影驰HOF PRO DDR5-8000 24GB内存评测:延迟不到55ns 游戏最低帧暴涨37%
    一、前言:低延迟低电压的单条24GB内存对于高端玩家来说,现在32GB(16GBx2)内存的确有点拿不出手,而64GB内存(32GBx2)虽然容量够了,但是单条32GB不仅价格昂贵,内存的时序和频率都要做妥协,整体性能与16GB版本相差甚远。相比之下,单条24GB内存能在容量和性能之间获得一个完美的平衡,因此现在越......
  • [C语言]整数在内存中的存储
    1、......
  • Android系统SELinux详解
    前言SELinux是一种加强文件安全的一种策略,可以更好地保护我们的Android系统,比如限制系统服务的访问权限、控制应用对数据和系统日志的访问等措施,这样就降低了恶意软件的影响,并且可以防止因代码存在的缺陷而产生的对系统安全的影响。从系统安全方面考虑,SELinux是保护神,但是从软件开......
  • 由遍历二维数组的方式引出缓存内存cpu
    对于二维数组,想要遍历的话,一行一行读和一列一列都读可以,但是大多数情况都选择一行一行,为什么呢?涉及到一个缓存的概念,一般都是cpu去计算,它会先去缓存找,如果找不到才去内存,先说缓存,一般缓存就是类似于一行一行,有个临近效应,顺便把旁边的也读了,十分方便,这就是缓存,入股一列一列,读完......
  • 最好用的Android APK第三方下载站,替代Google play
    最好用的AndroidAPK第三方下载站,推荐以下7个替代Googleplay方案可通过第三方应用程序下载各种apk历史版本1、APKPure:APKPure 提供:网页、AppAPKPure是知名度很高的免费安卓应用商店,基本上大部分GooglePlay上架的软件都可以在这里找到,但最近也有被屏蔽的倾向。2、APKMirror......
  • 内存泄漏常见情况及处理方法
    内存泄漏可以被视为你家中的水泄漏;虽然一开始小滴水可能看起来不是什么大问题,但随着时间的推移,它们可能会造成重大损失。同样,在JavaScript中,当不再需要的对象没有从内存中释放时,就会发生内存泄漏。随着时间的推移,这种累积的内存使用可以减慢甚至崩溃应用程序。定义:当不再用到的对......
  • H5与Android的调试
    准备工作:PC下载并安装chrome(谷歌)浏览器一台安卓手机(4.4系统以上),用usb线链接电脑,打开开发者模式,且允许WebView进行调试,需新增如下代码:WebView.setWebContentsDebuggingEnabled(true);编译并运行代码chrome浏览器地址栏输入chrome://inspect,进入后点击inspect即进入调试模式(需要......