面试之内存抖动

274 阅读1分钟

面试词:内存抖动、双亲委托、责任链

性能优化

  • 卡顿、耗电

内存抖动

  • 每创建一个对象,就会分配一块内存,每分配一块内存,程序的可用内存就少了一块。当程序的内存达到一定的可用程序,GC也就是垃圾回收机制,就会自动回收一些不再使用的内存。
  • onDraw() 里面创建对象,每次绘制就会创建,当界面频繁刷新的时候,就会创建一堆只用一次的对象。这就会导致内存的迅速攀升,当内存攀升到一定程度,就会触发GC机制进行回收。这就是Java的工作机制
  • 问题不是回收,二是内存刚被回收,就频繁地又创建一堆,这种内存快速忽高忽低的现象,就是内存抖动,像水波纹上下浮动。专业上称作: Memory churn
  • 内存抖动虽然看起来没什么问题,但是其实还是消耗了性能和时间的。短时间内多次爆发,就会出现界面卡顿的风险,甚至内存溢出、软件崩溃

避免内存抖动

  • 避免在onDraw里面创建对象,耗时更高,应为影响了下层Native的调用
  • 避免在次数比较多的循环里创建对象

内存抖动这个概念的价值

  • 很形象的形容了程序中的一种现象:增加、回收、增加、回收