Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump

论坛 期权论坛     
选择匿名的用户   2021-5-23 02:15   15   0
<div class="blogpost-body" id="cnblogs_post_body">
<div class="markdown_views">
  <p>相关文章 <br><a href="http://liuwangshu.cn/tags/Android%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/">Android性能优化系列</a> <br><a href="http://liuwangshu.cn/tags/Java%E8%99%9A%E6%8B%9F%E6%9C%BA/">Java虚拟机系列</a></p>
  <h3 id="前言"><strong>前言</strong></h3>
  <p>要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具。本篇就来介绍内存分析工具:Memory Monitor、Allocation Tracker和Heap Dump的使用方法。</p>
  <h3 id="1memory-monitor"><strong>1.Memory Monitor</strong></h3>
  <p>在Android Studio(以下简称AS)中Android Monitor是一个主窗口,它包含了Logcat,、Memory Monitor、CPU Monitor、 GPU Monitor和Network Monitor。其中Memory Monitor可以轻松地监视应用程序的性能和内存使用情况,以便于找到被分配的对象,定位内存泄漏,并跟踪连接设备中正在使用的内存数量。Memory Monitor可以报告出你的应用程序的内存分配情况, 更形象的呈现出应用程序使用的内存。它的作用如下:</p>
  <ul><li>实时显示可用的和分配的Java内存的图表。</li><li>实时显示垃圾收集(GC)事件。</li><li>启动垃圾收集事件。</li><li>快速测试应用程序的缓慢是否与过度的垃圾收集事件有关。</li><li>快速测试应用程序崩溃是否与内存耗尽有关。</li></ul>
  <h4 id="11-使用memory-monitor"><strong>1.1 使用Memory Monitor</strong></h4>
  <p>在使用Memory Monitor之前要确保手机开启了开发者模式和USB调试。 <br> 使用的步骤为: <br> 1.运行需要监控的应用程序。 <br> 2.点击AS面板下面的Android图标,并选择Monitors选项。 <br> 如果Memory Monitor已经运行,效果如下图所示(AS版本2.3.2)。 <br><img alt="QQ截图20170705223544.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8427e367b9c1596112a429f1312a89a2.png" title=""></p>
  <p>图中的标注的功能如下: <br> - Initiate GC(标识1):用来手动触发GC。 <br> - Dump Java heap(标识2):保存内存快照。 <br> - Start/Stop Allocation Tracking(标识3):打开Allocation Tracker工具(后面会介绍)。 <br> - Free(标识4):当前应用未分配的内存大小。 <br> - Allocated(标识5):当前应用分配的内存大小。</p>
  <p>图中y轴显示当前应用的分配的内存和未分配的内存大小;x轴表示经过的时间。</p>
  <h4 id="12-大内存申请与gc"><strong>1.2 大内存申请与GC</strong></h4>
  <p><img alt="am-gc2.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-92e51d8f5a4e6c8028dd09407b365bef.png" title=""></p>
  <p>从上图可以看出,分配的内存急剧上升,这就是大内存分配的场景,我们要判断这是否是合理的分配的内存,是Bitmap还是其他的大数据,并且对这种大数据进行优化,减少内存开销。 <br> 接下来分配的内存出现急剧下降,这表示垃圾收集事件,用来释放内存。</p>
  <h4 id="13-内存抖动"><strong>1.3 内存抖动</strong></h4>
  <p><img alt="20150924173526554 (1)_副本.jpg" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-228c8b402a8d04aaac30c18e0bb9e8f8.jpg" title=""></p>
  <p>内存抖动一般指在很短的时间内发生了多次内存分配和释放,严重的内存抖动还会导致应用程序卡顿。内存抖动出现原因主要是短时间频繁的创建对象(可能在循环中创建对象),内存为了应对这种情况,也会频繁的进行GC,因此综合起来就产生了内存抖动,产生了如上图般的锯齿状。</p>
  <h3 id="2allocation-tracker"><strong>2.Allocation Tracker</strong></h3>
  <p>Allocation Tracker用来跟踪内存分配,它允许你在执行某些操作的同时监视在何处分配对象,了解这些分配使你能够调整与这些操作相关的方法调用,以优化应用程序性能和内存使用。 <br> Allocation Tracker能够做到如下的事情:</p>
  <ul><li>显示代码分配对象类型、大小、分配线程和堆栈跟踪的时间和位置。</li><li>通过重复的分配/释放模式帮助识别内存变化。</li><li>当与 HPROF Viewer结合使用时,可以帮助你跟踪内存泄漏。例如,如果你在堆上看到一个bitmap对象,你可以使用Allocation Tracker来找到其分配的位置。</li></ul>
  <h4 id="21-使用allocation-tracker"><strong>2.1 使用Allocation Tracker</strong></h4>
  <p>AS和DDMS中都有Allocation Tracker,这里会·介绍AS中的Allocation Tracke如何使用。首先要确保要确保手机开启了开发者模式,并且开启了USB调试。 <br> 使用的步骤为: <br> 1.运行需要监控的应用程序。 <br> 2.点击AS面板下面的Android图标,并选择Monitors选项。 <br> 3.点击Start Allocation Track
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP