android Monitor性能分析
<p>内存泄露分析工具—Android Monitor</p>
<p>1、Android Monitor是Android Studio自带的一个强大的性能分析工具,里面一共包含5个模块:Logcat、Memory(内存)、Network(网络)、CPU、GPU,我们可以使用这些工具监测APP的状态。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c59f6f742fdf9f2216e2982bb8209822?showdoc=.jpg" alt="" /></p>
<p>2、Logcat
是调试中非常好用的工具。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/38e1fbbce67ec0fd46181253747c4e7d?showdoc=.jpg" alt="" /></p>
<p>3、Memory(内存)
如果这个值稳定,没有很大的变动,说明内存没什么问题。</p>
<p>3.1.1、工具介绍
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2e4ea5c75a70d7b9b55b012a91fcea1f?showdoc=.jpg" alt="" /></p>
<p>第1个(Enabled)Memory的开关。如果选择关闭,则不对当前进程进行内存监测;
第2个(Initiate GC)手动调用GC,我们在抓内存前,一定要手动点击 Initiate GC按钮手动触发GC,这样抓到的内存使用情况就是不包括Unreachable对象的;
第3个(Dump Heap java)点击这个按钮的时刻,就在点击的时刻,将获取hprof文件(hprof文件也是我们使用MAT工具分析内存时经常使用的文件)若进行简单的数据分析用这个就可以,需要详细分析那么就得使用MAT工具,如图:
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/23f9473cbd9b52e7354500ba01fcfd37?showdoc=.jpg" alt="" /></p>
<pre><code>A 区域可以看类视图,class list view;或者包视图,package tree view。
B 区域对应的是A中选中类的实例对象。
C 区域是对应B中选中实例的引用链,dominating size可以看到占用的大小</code></pre>
<p>第4个(Start Allocaton Tracking)开始分配追踪,第一次点击可以指定追踪内存的开始位置,第二次点击可以结束追踪的位置。这样我们截取了一段要分析的内存,等待几秒钟AndroidStudio会给我们打开一个Allocation视图,开后我们可以看到各个线程中的方法所占用内存的大小。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/fb5ccbf89e2fd1f122c2dc9d0753d5c8?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c9c48e907b1f850c9ffd9dbabd3a8b33?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/bf1cad0d6da58e360c397351789e7cd4?showdoc=.jpg" alt="" /></p>
<p>第5个按钮就是跳转到官网说明的网页:<a href="https://developer.android.com/studio/profile/am-memory.html?utm_source=android-studio">https://developer.android.com/studio/profile/am-memory.html?utm_source=android-studio</a></p>
<p>3.1、.hprof文件分析
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f5a039cbf7d0c7d4765e50deae62598c?showdoc=.jpg" alt="" /></p>
<p>3.2、属性对照表
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/a59aad8345baa7d249381664536b1991?showdoc=.jpg" alt="" /></p>
<p>3.3、.alloc文件
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/fa46e415d392dcc4a2e615a9c5eaef0c?showdoc=.jpg" alt="" /></p>
<p>注:追踪内存分配信息,可以很直观地看到某个操作的内存是如何进行一步一步地分配的。</p>
<p>3.4、GC操作
GC操作需要暂停其他线程,因此短时间频繁的GC会对UI线程产生影响,导致频繁GC一般有两种情况,大量的对象被创建又在短时间内马上被释放,比如在View的onDraw方法中创建对象Young Generation的内存区域达到阀值,剩余空间不够的时候,也会触发频繁GC。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/08768bb51136d52ffcbb5a41ec9dad0e?showdoc=.jpg" alt="" /></p>
<p>Android Studio提供了Memory Monitor来实时显示应用运行时内存占用情况,下边蓝色部分是现在占用的内存,上面灰色的部分显示是已回收的内存。如果在图上看到尖峰,也就是快速分配内存又被回收,也就是发生了内存抖动,这里就是需要优化的地方。</p>
<p>4、Network(网络)
Tx:上传网速;Rx:下载网速</p>
<p>5、CPU
这个模块可以监控方法执行的时间轴,可以监测到每个方法的耗时,比较实用。
如图可以看到每个方法的执行时间,也可以看到自己写的方法:</p>
<pre><code>Inclusive time - 函数本身运行花费时间 + 函数调用其他函数时间
Exclusive time - 函数本身运行花费时间
Invocation count - 是调用次数
如果app出现卡顿现象,那么用此模块可以快速定位出比较耗时的方法。
Wall Clock Time 和Thread Time的区别是,Wall Clock Time 包括了Thread Sleep的时间,而Thread Time不包括。</code></pre>
<p>6、GPU
分析GPU的性能,实时查看绘制每一帧所花费的时间:
<a href="https://developer.android.com/studio/profile/am-gpu.html">https://developer.android.com/studio/profile/am-gpu.html</a></p>