Nixo Home

内存优化

字数统计: 422阅读时长: 1 min
2019/07/17 Share

如何避免OOM产生考点

  • 对Java内存管理机制有一定认知
  • Android内存优化经验
  • 代码编写习惯避免内存消耗

如何避免OOM产生(原因)

  • OOM如何产生?
  • 如何优化程序减少内存占用

如何产生OOM?

  • 已使用内存+新申请内存>可分配内存
  • OOM几乎覆盖了所有内存,通常指堆内存
  • Native Heap在物理内存不够时会抛出OOM

如何解决OOM?

  • 使用合适的数据结构类型{
    以HashMap为例展开优化
    原数个数(>1000 -> HashMap else ArrayMap or SparseArray)
    增删频繁吗(频繁->HashMap else ArrayMap or SparseArray)
    Key是整形吗(是-> SparseArray else ArrayMap)
    HashMap vs ArrayMap{
    • 查询 (HashMap ->n(1) ArrayMap ->n(logn))
    • 插入 (HashMap ->n(1) ArrayMap ->n(logn))
    • 扩容 (HashMap ->X2 ArrayMap ->X1.5)
    • 缩容 (HashMap ->无 ArrayMap ->X0.5)
    • 额外对象(HashMap -> 额外的Entry ArrayMap->没有)
    • 复用 (HashMap -> 无 ArrayMap->小数组复用池)
      为什么整形使用SparseArray? : 避免了整形的装箱拆箱的开销
枚举的问题{
一个枚举可以占用内存1-1.4kb 而使用int则可以减轻内存占用,使用枚举不光会有占用内存的问题,还会导致编译出来的.dex体积变大

}

}

Bitmap如何优化占用内存

  • 选择合适的分辨率

  • 注意原始文件分辨率与内存缩放的结果

  • 不用帧动画,尽量用代码写

  • 考虑对Bitmap的重采样和复用配置

    谨慎使用大堆

    android:LargeHeap:true
    使用大堆后不同手机会分配不同的内存,但是会导致GC的时候会比较慢

}

CATALOG
  1. 1. 如何避免OOM产生考点
  2. 2. 如何避免OOM产生(原因)
    1. 2.1. 如何产生OOM?
    2. 2.2. 如何解决OOM?
    3. 2.3. Bitmap如何优化占用内存
    4. 2.4. 谨慎使用大堆