如何避免OOM

OOM(内存溢出)已使用的内存+新分配的内存>可分配的内存就会抛出OOM,那么避免OOM的思路就是如何去减少内存的使用。

通常Android里的oom是堆内存溢出,但是Native heap在物理内存不够时也会抛出oom

Bitmap

Bitmap无疑是内存大户,首先看看使用Bitmap的时候可以怎么样优化。
1.根据实际情况使用合适分辨率的Bitmap
2.注意原始分辨率和内存缩放结果(比如drawable-xdpi,drawable-xxdpi这些文件夹多放几套图和只放一套图的区别)
3.少使用逐帧动画,多实用代码画动画
4.考虑对Bitmap的重采样和重配置(比如在不需要很清晰或者不需要透明通道的情况下可以重新创建一个ARGB_4444或RGB_565的Bitmap)

使用合适的数据结构

比如HashMap,我们在实际项目中经常会用到,但是其实HashMap也有几个具有差不多功能的数据结构可以替代使用:ArrayMap,SparseArray。
那么这三个数据结构在什么时候使用呢?
1.当数据量比较多或者频繁增删的时候使用HashMap(大于1000)因为HashMap的查询和插入都接近于O(1)。
2.否则当储存的数据的key是整形的则使用SparseArray,SparseArray的key使用的是int基本类型省略了装箱拆箱的步骤并且节省了内存。
3.如果key类型不是int类型则使用ArrayMap

避免使用枚举

枚举和int变量所占用的内存相差甚远,一个枚举占用24bytes而一个int占用4bytes。

但是使用int类型就没有类型安全限制了,这个时候我们就可以使用java的注解@intDef去解决。

这样又有一个问题了kotlin怎么解决呢?
kotlin里可以使用内联类解决。

谨慎使用多进程

我们知道android每个进程使用的内存是有限的,如果一个app在一个进程中使用过多的内存会抛出oom。所以多开一个进程可以多一倍可用的内存。
但是一个进程fork出来的时候就已经占用一部分内存了,因为空进程本身就拥有一些系统共享的资源,所以在设备本身物理内存不多的时候.就需要谨慎了,不然本不多的内存会雪上加霜。

谨慎使用Large Heap

使用Large Heap有可能会让我们的进程能够使用更多的内存,之所以说是有可能是因为有些手机os使用Large Heap后是没有变化的。

使用Large Heap除了能让应用使用更多的内存之外还有一些弊端,更大的内存控件必然会导致gc过程更久,有可能会导致gc的时候应用卡顿。

使用NDK

NDK的代码是直接在物理内存上分配内存的,所以不受虚拟机限制。理论上可以使用全部可分配的物理内存。
比如一些游戏和地图软件因为对内存的使用比较多,所以有一部分功能会直接用native 代码写的,并且native代码执行效率也会更高
o/flowchart.js/

android 内存优化(避免OOM)--面试经典问题相关推荐

  1. 【MDCC技术大咖秀】Android内存优化之OOM

    大神分析的很全面,所以就转过来保存一份,转自:http://www.csdn.net/article/2015-09-18/2825737/1 以下为正文: Android的内存优化是性能优化中很重要 ...

  2. 关于Android内存优化

    介绍 在Android系统中,内存分配与释放分配在一定程度上会影响App性能的-鉴于其使用的是类似于Java的GC回收机制,因此系统会以消耗一定的效率为代价,进行垃圾回收. 在中国有句老话:" ...

  3. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  4. Android内存优化汇总

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  5. 【腾讯Bugly干货分享】Android内存优化总结实践

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 导语 智 ...

  6. ANDROID内存优化(大汇总——全)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  7. Android 内存优化总结实践

    原文地址:https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 导语 智能手机发展到今天已经有十几个年头,手机的软硬件都已经发生了翻天覆地的变化,特别是A ...

  8. Android内存优化总结实践

    http://www.cnblogs.com/ldq2016/p/6635774.html 本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https:// ...

  9. Android内存优化总结

    [腾讯Bugly干货分享]Android内存优化总结&实践 本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq ...

  10. Android内存优化的知识梳理

    JVM内存管理基础知识 了解JVM内存管理的基础内容,对我们理解内存分配有很大的帮助:比如Java堆的原理,JVM如何判断对象的存活.几种垃圾回收算法: 关于这部分,可以参考笔者之前写的JVM|翻越内 ...

最新文章

  1. Jeff Dean谈2020年机器学习趋势:多任务和多模式学习将成为突破口
  2. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.10节使用内容识别修补...
  3. Kubernetes的ConfigMap说明
  4. php权限二进制,了解二进制权限,二进制权限的应用(PHP演示)
  5. spring 各个jar包的功能
  6. java金字塔的流程图,R中的金字塔图
  7. JSONArray传值的使用小结
  8. 外媒:英特尔未来10年可能投资950亿美元在欧洲新建8家芯片厂
  9. 解决Linux下pcieport 0000:00:1c.5问题导致的系统根目录/磁盘空间不足
  10. 用lstm模型做预测_使用LSTM深度学习模型进行温度的时间序列单步和多步预测
  11. 阻止默认事件event.preventDefault();
  12. 基于STM32的USB枚举过程学习笔记
  13. Redis雪崩效应以及解决方案
  14. uniapp H5微信公众号跳转小程序
  15. 按键精灵助手无法连接模拟器解决方案【适用任何模拟器】
  16. 用计算机怎么弹两只老虎,七键两只老虎曲谱_64键的电子琴怎么弹两只老虎1234567按哪个键...
  17. 移动数据统计平台分析
  18. android--新闻阅读器实现源码
  19. 外企面试,哪有你想象的那么难!
  20. react加水印_React水印组件,支持图片水印,文字水印

热门文章

  1. Cesium|xt3d 自定义html标注(含编辑)
  2. VLP16:使用pointcloud_to_laserscan将三维点云转化为二维LaserScan
  3. 我两个月了_猪队友_新浪博客
  4. EndNote21 | 安装及库的创建
  5. Android 联网频道管理+数据库
  6. 单点登录--Day10
  7. 查询异常:java.sql.SQLException: HOUR_OF_DAY: 0 -> 1
  8. antv g2字体阴影_AntV/G2Plot 开源 - 精雕细琢,打造极致可视化图表体验
  9. 关于二叉树(创建、遍历、画图)(个人学习使用,非专业)
  10. 预约挂号医院管理项目----service_OSS模块—对象存储