内存问题:内存抖动为什么会导致程序卡顿与OOM?

2021-03-19  本文已影响0人  程序狮

内存抖动

短时间内有大量对象创建与销毁,它伴随着频繁的GC。

卡顿

内存抖动会引起频繁的gc,gc是会STW(stop the word)的,会暂停用户线程。

OOM

CMS垃圾回收器老年代是标记-清除算法:不会移动存活的对象,会产生内存碎片。
像有一种内存情况,虽然有很多内存可用,但却是不连续的,如果申请连续的10个字节(假设现在内存中没有连续10个情况)的内存就会产生OOM,因为没有连续的10个字节的可用内存。
比如申请bitmap时就很可能产生OOM。

预防内存抖动

1.避免在循环中创建对象;
2.避免在频繁调用的方法中创建对象,如View的onDraw方法;
3.允许复用的情况下,使用对象池进行缓存,如:Handler的Message单链表(obtain);

内存抖动例子

字符串拼接,+=操作。
避免用+或者+=操作,使用StringBuilder来实现字符串拼接

上一篇 下一篇

猜你喜欢

热点阅读