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. 内存对象的重复利用-利用对象池技术
相关推荐
扶尔魔ocy6 分钟前
【QT android】模仿行车记录仪案例
android·qt
看我debug11 分钟前
Android 运行时分析工作台 (Demo)。统一管理 Frida 脚本、自动注入(修改运行时代码)、收集结构化结果、生成 JSON 报告。
android·python·pip
通信侠14 分钟前
android 13重启清除任务快照
android
小铁-Android1 小时前
CompletableDeferred:Kotlin 协程中用于一次性挂起通信的工具
android·kotlin
恋猫de小郭1 小时前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
ii_best1 小时前
安卓手机开发、iOS 手机开发都能用:按键精灵远程调试,设备在千里外也能改脚本
android·ios·智能手机·自动化·按键精灵
stevenzqzq4 小时前
Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
android·android jetpack
撩得Android一次心动12 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
是真的小外套13 小时前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
用户20187928316715 小时前
一文讲透 Android Native Heap 监控原理:一间"只进不出"的仓库,和总部派来的侦探
android