当前位置:   article > 正文

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

android profiler内存分析

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

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

一、分析应用内存的目的

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

二、Profiler概览

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

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

三、查看内存分配情况

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

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

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

四、捕获堆转储

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

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

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

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

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

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题

图片

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/601955
推荐阅读
相关标签
  

闽ICP备14008679号