1.内存抖动与内存泄漏
2.Profiler、MAT工具的使用
3.内存问题常见场景
内存抖动
内存抖动的原因:
短时间内有大量的对象创建销毁,它伴随着频繁的GC。
内存抖动会导致的问题:
1.程序卡顿 (因为GC会stop the world,这时会暂停用户线程,只有gc线程在运行)
2.OOM(CMS垃圾回收器采用的是标记清理算法,会产生内存碎片,比如回收了8字节的内存,但后面如果进行分配10个字节的连续内存时就会OOM,因为没有连续的10字节的内存)
典型的造成内存抖动的场景:
1.for循环内创建新对象
如:for循环内字符串拼接
String result = “;
for(int i=0;i < 100,i++) {
result += i+”";
}
2. 在频繁调用的方法里创建新对象
如:在执行动画的View的onDraw()方法里调用Color.parseColor(),Color.parseColor()方法里面会调用String.subString()产生大量新的字符串
避免内存抖动的方法:
1.尽量避免在循环和频繁调用的方法里创建对象
2.使用缓存池,如享元模式
如:Message就是使用享元模式,所以发送Message时,不要使用handler.sendMessage(new Message()),而是使用handler.sendMessage(Message.obtain())
内存泄漏
内存泄漏的原因:
长生命周期的对象持有短生命周期对象的强引用。
Profiler只能看到对象被哪些对象引用,但不知道是强引用还是软引用还是弱引用,可以使用MAT工具,过滤出强引用。
内存泄漏会导致的问题:
OOM,程序直接崩溃
典型的造成内存泄漏的场景:
- 非静态内部类、匿名内部类
查看内存问题的工具
Android Monitor:
参考:
AndroidStudio–Profiler
Android性能优化之CPU Profiler
内存优化——内存抖动
Android中常见的内存泄露及解决办法汇总
Android 内存泄露分析实战演练
Android开发常见的Activity中内存泄漏及解决办法
Android性能优化之内存优化
Android性能优化之绘制优化
深入探索Android布局优化(上)
深入探索Android布局优化(下)
深入探索Android卡顿优化(上)
深入探索Android卡顿优化(下)
深入探索Android稳定性优化
深入探索Android启动速度优化