一,内存抖动
内存抖动:指的是在短时间内大量的新对象被实例化,运行时无法承载这样的内存分配,在这种情况下垃圾回收事件被大量调用,影响到应用程序的UI和整体性能。
二,分析内存抖动
Android Studio提供了一个 profile的工具,可以帮助我们分析内存情况,在studio的上不有一个表盘的图标
点击红框图标,然后就会运行当前项目,选中连接的手机,然后在studio的底部就会出现一个Android Profile的工具项(如下图)。
我们会看到有CPU,MEMORY,NETWORK三个选项,我们要监控的是内存,所以点击MEMORY,会进入下图
在这张图中我们可以看到我们当前应用所占的内存total,我们这里重点说一下左上角的三个按钮分别是:
- GC手动垃圾回收
- 收集当前页面的内存情况并生成hprof文件
- 记录当前操作的内存情况
首先我们调用GC是当前内存处于稳定状态,然后点击红色按钮开始记录内存状况,然后我们开始在手机上进行操作(一般这个时候会发现平稳的曲线开始波动),然后我们点击停止按钮,回出现下图的情况。
框框内是我们当前记录的操作区间,当我们点击停止按钮的时候,
在Class Name这个框内,会生成当前记录区间(操作过程)的堆信息。
我们发现我们的曲线有一个向上的陡坡,说明我们的操作造成了大量的内存分配,通过下面堆信息我们来找一下是什么造成了大量的内存分配。
我们发现堆信息是从大到小排列的,而第一条是系统的imageView,明显这里有问题,点击进去发现有大量的imageView对象,点击其中的一个,右下角的框框会显示该对象的具体位置信息。至此我们找到了造成内存抖动的罪魁祸首,
当然,这里的内存抖动是我人为加上去的,比较明显,但是原理是一样的。