OOM 定义
OOM:OutOfMemoryError (extends VirtualMachineError),内存溢出异常。
Thrown when the Java Virtual Machine cannot allocate an object
because it is out of memory,
and no more memory could be made available by the garbage collector.
由此可见,当 JVM 需要为一个对象分配内存,而不能够申请到足够的内存空间,并且通过 GC 操作后仍然无法获得足够的内存空间时,就会抛出 OOM 异常。
Android 中的 OOM
出现场景:
- 加载过多图片资源,导致内存耗尽;
- 加载的图片资源过大;
- 分配过大的数组;
- 内存资源未合理使用、释放,出现内存泄漏,由此导致内存溢出;
解决办法:
- 使用软引用或弱引用存储图片缓存,使得内存不足时,JVM 可以释放这部分内存空间;
- 使用 BitmapFactory 的一些 Options 优化图片资源的加载,压缩,降低图片加载的质量等,根据当前用户的手机配置、像素、可用内存及显示图片用的 imageView 的大小等决定加载的图片的 size 及质量;
- 图片延迟加载、按需加载,不要将所有图片一次性载入内存,当用户刷新或需要的时候再加载;
- 优化编码,及时释放申请的资源,打开的文件,游标等,避免内存泄漏;
- 使用内存泄漏检测工具如 MAT 等检测应用程序中是是否出现内存泄漏,并优化出现内存泄漏的代码;
- 优化 Dalvik VM 的内存分配和处理效率。
网友评论