mobile28365-365-365bet体育在线公司备用-英国365客服

OOM内存溢出产生原因和避免方法

OOM内存溢出产生原因和避免方法

(一)什么是OOM?

OOM(Out Of Memory 内存溢出) 是指应用程序申请内存时,系统无法提供足够的内存空间来满足需求,导致程序崩溃的现象。在Android中通常表现为java.lang.OutOfMemoryError。

(二)OOM产生原因

内存泄漏(Memory Leak):对象不再使用但未被回收

大对象/大图片加载:未压缩的图片、过大的数据结构

资源未释放:文件流、数据库连接、Bitmap等未关闭

过多线程:线程创建过多且未合理管理

内存抖动:频繁创建/销毁对象导致GC频繁

数据结构选择不当

(三)如何避免OOM

避免内存泄漏

图片处理优化、加载大对象,如Bitmap。优化方法:

采用低内存占用量的编码方式

图片压缩

及时回收图像。

使用内存缓存,在内存中加载图片时直接在内存中做处理,如边界压缩。

使用更轻量级的数据结构,比如:可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。

避免在Android里面使用Enum。

相应资源太多,来不及释放。

在内存引用上做些处理,常用的由软引用、强引用、弱引用

ListView/GridView等出现大量重复子组件的视图里面对ConvertView的复用

StringBuilder

内存对象的重复利用-利用对象池技术

相关推荐