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

(一)什么是OOM?

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

(二)OOM产生原因

  1. 内存泄漏(Memory Leak):对象不再使用但未被回收
  2. 大对象/大图片加载:未压缩的图片、过大的数据结构
  3. 资源未释放:文件流、数据库连接、Bitmap等未关闭
  4. 过多线程:线程创建过多且未合理管理
  5. 内存抖动:频繁创建/销毁对象导致GC频繁
  6. 数据结构选择不当

(三)如何避免OOM

  1. 避免内存泄漏
  2. 图片处理优化、加载大对象,如Bitmap。优化方法:
  • 采用低内存占用量的编码方式
  • 图片压缩
  • 及时回收图像。
  1. 使用内存缓存,在内存中加载图片时直接在内存中做处理,如边界压缩。
    使用更轻量级的数据结构,比如:可以考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构。
  2. 避免在Android里面使用Enum。
  3. 相应资源太多,来不及释放。
    在内存引用上做些处理,常用的由软引用、强引用、弱引用
  4. ListView/GridView等出现大量重复子组件的视图里面对ConvertView的复用
  5. StringBuilder
  6. 内存对象的重复利用-利用对象池技术
相关推荐
一笑的小酒馆6 小时前
AndroidKMP之网络请求
android
aqi0010 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
事圆则缓10 小时前
MVVM 的理解与设计
android·android jetpack
码农阿豪11 小时前
我把 OpenClaw 装进旧安卓手机后,又折腾了 3 天:飞书、ADB、SSH 全部打通
android·智能手机·飞书
有什么事13 小时前
把安卓搬上云端:云手机系统改造与内核优化拆解
android·智能手机
方白羽13 小时前
性能分析:Android Studio Profiler
android·性能优化·app
没文化的阿浩13 小时前
【MySQL】用户管理
android·mysql·adb
FlightYe15 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
法欧特斯卡雷特15 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·开源·全栈
摇滚侠15 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记