内存抖动
指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现的原因主要是频繁在循环里创建对象。(导致大量对象在短时间内被创建,由于新对象是要占用内存空间的而且是很频繁)
内存抖动的结果:如果抖动很频繁,会导致垃圾回收机制频繁运行(短时间内产生大量对象,需要大量内存,而且还是频繁抖动,就可能会需要回收内存以用于产生对象,垃圾回收机制就自然会频繁运行了)
综上就是频繁内存抖动会导致垃圾回收频繁运行。
内存抖动解决办法
尽量避免在循环体内创建对象,应该把对象创建移到循环体外
注意自定义View的onDraw()方法会被频繁调用,所以在这里面不应该频繁的创建对象
当需要大量使用Bitmap的时候,试着把它们缓存在数组中实现复用
对于能够复用的对象,可以使用对象池将它们缓存起来
GC回收机制
通过引用计数器count记录被引用的次数,当每有一次被引用时count+1,当count为0时,此对象被回收
弊端:当对象A引用了对象B,对象B引用了对象A,出现循环引用,导致两个对象都不会被回收
GcRoot方式:new一个对象A时会引入一个GCRoot,在对象A的构造方法中new一个B对象,A会引入B,在B的构造方法中new一个C对象,B又引入了C,GCRoot的链形成了,当A置为null时,B对象C对象都会被回收。
垃圾回收算法
标记清除和标记整理
标记清除
首先标记所有可回收的对象,在标记完成后同意回收所有被标记的对象。同时会产生不连续的内存空间,碎片过多会导致以后程序运行时需要分配较大对象时,无法找到足够的连续内存,会更多次的触发GC。
标记整理
首先标记可回收的对象,在将存活的对象都向一端移动,然后清理掉边界以外的内存。此方法避免了标记清除算法的碎片问题,同时也避免了法治算法的空间问题。
crash问题
报错的时间节点往前找
native异常分析so
java系统的api例如(handlemessage,activity)之类的,生命周期引起的问题
oom分析用户使用了哪些功能activity开启了哪些页面,测试复现



