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/多进程/第三方框架