Android使用Profiler查看应用内存分析的操作步骤

 更新时间:2023年10月27日 09:27:00   作者:淘淘养乐多  
内存分析是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查看堆占比,可以看出一个线程占比过高,集合中对象的数量过多等。

以上就是Android使用Profiler查看应用内存分析的操作步骤的详细内容,更多关于Android Profiler查看应用内存分析的资料请关注脚本之家其它相关文章!

相关文章

  • Android基本游戏循环实例分析

    Android基本游戏循环实例分析

    这篇文章主要介绍了Android基本游戏循环,以完整实例形式较为详细的分析了Android实现基本游戏循环的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • android网络编程之android连接网络的简单示例代码

    android网络编程之android连接网络的简单示例代码

    这篇文章主要介绍了android连接网络的简单示例,需要的朋友可以参考下
    2014-04-04
  • Android判断和监听底座状态和类型的方法介绍

    Android判断和监听底座状态和类型的方法介绍

    这篇文章主要介绍了Android判断和监听底座状态和类型的方法介绍,例如判断当前底座状态、判断插入底座类型、监控充电充电状态等,需要的朋友可以参考下
    2014-06-06
  • Android中播放在线音乐代码

    Android中播放在线音乐代码

    这篇文章主要介绍了Android中播放在线音乐代码,本文只给出了核心操作代码,需要的朋友可以参考下
    2015-04-04
  • Android Location服务之LocationManager案例详解

    Android Location服务之LocationManager案例详解

    这篇文章主要介绍了Android Location服务之LocationManager案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • android仿支付宝密码输入框效果

    android仿支付宝密码输入框效果

    这篇文章主要为大家详细介绍了android仿支付宝密码输入框效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android绘图技巧使用详解

    Android绘图技巧使用详解

    这篇文章主要为大家详细介绍了Android绘图技巧的使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Kotlin协程的线程调度示例详解

    Kotlin协程的线程调度示例详解

    这篇文章主要为大家介绍了Kotlin协程的线程调度示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android自定义View实现垂直时间轴布局

    Android自定义View实现垂直时间轴布局

    这篇文章主要为大家详细介绍了Android自定义View实现垂直时间轴布局的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android中使用protobuf的具体示例

    Android中使用protobuf的具体示例

    本篇文章主要介绍了Android中使用protobuf的具体示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论