什么是oom?
当前程序占用的内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制,就会抛出Out of memory。经常遇到的就是有关于bitmap的大图加载问题。
一些容易混淆的概念
内存溢出 out of memory
内存抖动 短时间内大量的对象被创建,占用了大量的young nation的区域,当达到阈值就会触发GC。
内存泄漏 java或android当中,比方说一些垃圾对象已经没有被其他的对象使用了,但是他们却可以直接或者间接的引用到GC Root,就是说引用到了其他还没有被回收的对象,导致GC无法产生作用。
如何解决oom
有关bitmap优化
1. 图片显示 比方说listview,如果在滑动的时候不要去进行网络请求加载图片。等停止的时候在做。
2.及时释放内存bitmap的factory都是在native,那部分虚拟机释放不了,只能收到调用recycle。养成很好的习惯。
3.图片压缩 bitmap.encyclesize压缩比例inSimplesize
4.inBitmap属性 可以提高分配和释放的执行效率,告知bitmap的解码器,如果已经存在的内存区域中,会继续使用那个区域,而不是重新申请一块内存。
5.捕获异常outofmemory,如果使用的是execpt是获取不到的,要使用execeptionerror
其他方法
1.listview:convertview复用 lru缓存机制 三级缓存机制。
2.避免在onDraw方法里面执行对象的创建 内存突然上升,频繁GC,内存抖动。
3.谨慎使用多进程。使用不当会出现内存增长,各种crash。后台常驻任务。