谈一谈Android内存优化那些事(三)Android内存分析与监控

由于内容比较多,我从三个方面分为三篇对Android内存优化进行介绍:

1.Android内存分配与回收机制
2.Android常用的内存优化方法
3.Android内存分析与监控

上两篇文章我们说完了内存分配与回收机制、内存优化的问题,那么事后的内存分析和监控是必不可少的了!下面我们就介绍一下内存分析与监控。

##Android内存分析与监控
Android内存分析和监控主要介绍如下四种方式:

  1. 查看GC日志
  2. 查看内存使用情况
  3. 通过LeakCanary监控内存 泄漏
  4. 线上监控

###1.查看GC日志

GC的类型:

Concurrent: 不会暂停应用线程的并发垃圾回收。此垃圾回收在后台线程中运行,而且不会阻止分配。

Alloc: 您的应用在堆已满时尝试分配内存引起的垃圾回收。在这种情况下分配线程中发生了垃圾回收。

Explicit:由应用明确请求的垃圾回收,例如,通过调用system.gc()。与 Dalvik 相同,在 ART 中,最佳做法是您应信任垃圾回收并避免请求显式垃圾回收(如果可能)。不建议使用显式垃圾回收,因为它们会阻止分配线程并不必要地浪费 CPU 周期。如果显式垃圾回收导致其他线程被抢占,那么它们也可能会导致卡顿(应用中出现间断、抖动或暂停)

NativeAlloc:原生分配(如位图或 RenderScript 分配对象)导致出现原生内存压力,进而引起的回收。

查看垃圾回收日志

在AndroidStudio Logcat过滤GC,然后操作App一段时间后会出现上图的GC内容:

垃圾回收原因+垃圾回收的名称+释放对象+释放对象大小+释放大型对象的大小+堆统计数据+暂停时间

LOS objects是前面所说到的Art虚拟机新增的

着重关注最后面的暂停时间,超过16ms会影响界面,一般大于700ms会影响体验,Android Vitals 将连续丢帧超过 700 毫秒定义为冻帧,也就是42帧

2.查看内存使用情况

通过查看内存使用情况来分析App的内存占用是非常必要的,下面分别介绍如下两种方式:

  1. adb shell
  2. Profiler

查看内存使用情况

详细的使用请参考AndroidDeveloper调查RAM使用情况

使用Profiler分析内存

AndroidStudio的Profiler功能越来越强大,不仅集成了内存分析,还有电量、CPU、网络等数据的分析。

如何通过Profiler进行内存的分析,如何找到内存泄漏请查看

使用 Memory Profiler 查看 Java 堆和内存分配

这里要说下,Android官网的很多文章都被翻译成了中文,这对国内的开发者来说越来越有好了,但要注意中文翻译的文章会比较滞后,最新版一般都是英文。

###3. 使用LeakCanary监控内存泄漏

LeakCanary名字的由来:Canary是煤矿中金丝雀表达的参考,暗示了矿工将随身携带进入矿井隧道的笼养金丝雀(鸟类)。如果在矿井中收集到一氧化碳等危险气体,这些气体会在杀死矿工之前杀死金丝雀,从而提供警告立即离开隧道。

原理:LeakCanary通过ApplicationContext统一注册监听的方式,通过application.registerActivityLifecycleCallbacks来绑定Activity生命周期的监听,从而监控所有Activity; 在Activity执行onDestroy时,开始检测当前页面是否存在内存泄漏,并分析结果。KeyedWeakReference与ReferenceQueue联合使用,在弱引用关联的对象被回收后,会将引用添加到ReferenceQueue;清空后,可以根据是否继续含有该引用来判定是否被回收;判定回收, 手动GC, 再次判定回收,采用双重判定来确保当前引用是否被回收的状态正确性;如果两次都未回收,则确定为泄漏对象。

LeakCanary的问题:LeakCanary也有一定的不确定性,一般同一个地方反复泄漏5次,算是一个泄漏,同时不建议用在线上环境。

详细查看?Github

4.线上监控

线上的内存监控一般都是一些大公司在做,例如美团的Probe还有微信最近开源的Matrix,个人觉得这个可以去了解下,大公司用户数多时会用到,小公司App接入必要性不是很大,一般来说把上面的介绍的部分做好了就足够了。

推荐阅读

谈一谈Android内存优化那些事(一)内存分配与回收机制
谈一谈Android内存优化那些事(二)Android常用的内存优化方法

最后介绍个QQ群:979045005,Android开发的朋友可以加一下,有什么新技术大家一起交流学习一下,整理了一些干货,需要的话,可以进群找管理免费领取,不多说直接上图吧!

猜你喜欢

转载自blog.csdn.net/weixin_43902172/article/details/88850758