1.对于android GC的一些知识:
1.Android系统里面有一个Generational Heap Memory的模型,对于新创建的对象放在Young Generation区域,这个区域的对象通常都是会快速被创建 并且很快被销毁回收的,同时这个区域的GC操作速度也是比Old Generation区域的GC操作速度更快的。
2.GC在回收时候所有线程都会暂停,所以频繁GC会造成卡顿,android 为每个应用都分配了内存阈值,ActivityManager.getMemoryClass()可以用来查询当前应用的Heap Size阈值,这个方法会返回一个整数,表明应用的Heap Size阈值是多少MB(Megabates)。
3.匿名内部类,这可是安卓内存溢出的大大大头,先了解下匿名内部类吧:写法简单超级省事,但是必须牢记它会持有外部类的引用,如果内部类里面有静态变量长期持有外部类引用就会导致GC不掉,这下就溢出了。
2.DDMS简单实用笔记
heap:点开后点击GC,观察data object 和total size是否一致在增长,如果增长表示有溢出,如果稳定表示合格。
mat:有两个值需要记住,Shallowheap和Retained heap。Shallowheap是只一个对象所占的内存,Retained heap是只一个对象能回收的内存,
打个比方一个对象本身占用4M,这个对象又引用了其他3M的对象,当这个对象回收时Retained heap有可能是7M。