OOM的产生
- 已使用内存+新申请内存>可分配内存
- OOM几乎覆盖所有的内存区域,通常指堆内存
- Native Heap在物理内存不够时也会抛出OOM
使用合适的数据结构
- HashMap——大于1000个数、增删频繁
- ArrayMap——key不是整型
- SparseArray——Key是整型(池化技术、内存复用)
避免使用枚举
每一个枚举就是一个对象,对象至少占24字节。所以使用静态常量:
1 | (value = RetentionPolicy.SOURCE) |
Kotlin 可以使用内联类,编译时转化为int,节省内存。
Bitmap
内存优化5R法则
- Reduce缩减:降低图片分辨率/重采样/抽稀策略
- Reuse复用:池化策略/避免频繁创建对象,减小GC压力
- Recycle回收:主动销毁、结束,避免内存泄露/生命周期闭环
- Refactor重构:更合适的数据结构/更合理的程序架构
- Revalue重审:谨慎使用Large Heap/多进程/第三方框架