天天看点

Android性能优化——内存优化

尽管android有内存自动管理的优化,但是不恰当地使用内存仍然会导致严重的性能问题,在同一帧中创建过多的对象是非常值得注意的事情。

android对java的内存回收机制做了优化,系统会根据内存中不同的内存数据类型执行不同的GC操作,将刚分配的对象放在Young Generation中,这个区域中的对象会更快速地被回收,当Young Generation中的对象超过一定的时间就会进入到Old Generation中,Young Genration中的对象GC的速度和频率都大于Young Generation中的对象

而当GC操作时,任何线程的任何其他操作都不能进行,大量不停的GC操作会显著占用帧间隔时间(16ms),这样进行渲染的时间相应就少了,这样就会造成丢帧卡顿现象。

造成GC频繁发生的原因主要有两点:

1.内存抖动,大量的对象在短时间内创建又马上被释放,瞬间产生的对象会占用Young Generation的内存区域,当达到阀值时,就会触发GC操作,即使每次分配的对象占用很少的内存,它们加在一起也会造成很大的内存负担,从而引发其他类型的GC操作,并引起可以被用户感知的卡顿感觉。

2.内存泄露,内存泄露是指无法被GC识别的不再使用的对象,滞留在内存中,使内存区域越来越小,使GC操作更容易触发。

内存抖动可以使用Memory Monitor进行判断,内存泄露都可以使用Allocation Tracker和Heap Tool进行追踪

继续阅读