OOM问题

什么是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。后台常驻任务。

你可能感兴趣的:(OOM问题)