面试词:内存抖动、双亲委托、责任链
性能优化
- 卡顿、耗电
内存抖动
- 每创建一个对象,就会分配一块内存,每分配一块内存,程序的可用内存就少了一块。当程序的内存达到一定的可用程序,GC也就是垃圾回收机制,就会自动回收一些不再使用的内存。
- onDraw() 里面创建对象,每次绘制就会创建,当界面频繁刷新的时候,就会创建一堆只用一次的对象。这就会导致内存的迅速攀升,当内存攀升到一定程度,就会触发GC机制进行回收。这就是Java的工作机制
- 问题不是回收,二是内存刚被回收,就频繁地又创建一堆,这种内存快速忽高忽低的现象,就是内存抖动,像水波纹上下浮动。专业上称作: Memory churn
- 内存抖动虽然看起来没什么问题,但是其实还是消耗了性能和时间的。短时间内多次爆发,就会出现界面卡顿的风险,甚至内存溢出、软件崩溃
避免内存抖动
- 避免在onDraw里面创建对象,耗时更高,应为影响了下层Native的调用
- 避免在次数比较多的循环里创建对象
内存抖动这个概念的价值
- 很形象的形容了程序中的一种现象:增加、回收、增加、回收