Android性能优化之内存优化

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,程序直接崩溃

典型的造成内存泄漏的场景:

  1. 非静态内部类、匿名内部类

查看内存问题的工具

Android Monitor:在这里插入图片描述

参考:

AndroidStudio–Profiler
Android性能优化之CPU Profiler
内存优化——内存抖动

Android中常见的内存泄露及解决办法汇总
Android 内存泄露分析实战演练
Android开发常见的Activity中内存泄漏及解决办法

性能优化:那些关于内存泄漏的知识都在这里了!

Android性能优化之内存优化
Android性能优化之绘制优化
深入探索Android布局优化(上)
深入探索Android布局优化(下)
深入探索Android卡顿优化(上)
深入探索Android卡顿优化(下)
深入探索Android稳定性优化
深入探索Android启动速度优化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值