Android OOM 引发的思考
一、为何会出现OOM
因为Android系统的硬件资源是相当有限的,而且分配给一个应用的资源更为有限,尤其是内存。当应用突然申请的内存大于允许的最大值的时候,就会出现OOM。
如果想要获取App的内存使用情况,可以使用以下方法:
final int M = * ;
final Runtime runtime = Runtime.getRuntime(); Log.i("Memory", "最大可用内存:" + runtime.maxMemory() / M + "M");
Log.i("Memory", "当前可用内存:" + runtime.totalMemory() / M + "M");
Log.i("Memory", "当前空闲内存:" + runtime.freeMemory() / M + "M");
Log.i("Memory", "当前已使用内存:" + (runtime.totalMemory() - runtime.freeMemory()) / M + "M");
下面简单说一下每个函数的作用:
1)maxMemory()
该函数用于获取系统分配给JVM的最大可用内存(其实就是Java Heap),比如说使用以下Java命令启动Java程序:
java -Xms64m -Xmx1024m App01
final long usedMemory = totalMemory() - freeMemory();
二、修改应用内存的最大值
maxMemory限制了当前应用能够使用的最大内存值,而最大内存值基本上就决定了OOM出现的概率,目前能够修改最大内存值的方式就是,在Manifest里面添加Application标签:
android:largeHeap="true"
此时再测试一下,上面的代码,就基本上可以看到,最大内存值变大了。
具体的其他避免OOM的方式,目前不多赘述,写本文也是因为在正常使用时发现,即使使用了了解的避免OOM的方式时但还是无法避免OOM,只能采取修改一些应用配置信息来避免OOM。
Android OOM 引发的思考的更多相关文章
- Spring之LoadTimeWeaver——一个需求引发的思考---转
原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...
- android oom 全解析
Android oom 有时出现很频繁,这一般不是Android设计的问题,一般是我们的问题. 就我的经验而言,出现oom,无非主要是以下几个方面: 一.加载对象过大 二.相应资源过多,没有来不及释放 ...
- 由SecureCRT引发的思考和学习
由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- 【思考】由安装zabbix至排障php一系列引发的思考
[思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...
- 由<a href = "#" > 引发的思考
原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" > 的方式 绑定clic ...
- 曲演杂坛--一条DELETE引发的思考
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...
- class_copyIvarList方法获取实例变量问题引发的思考
在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...
- Android插件化的思考——仿QQ一键换肤,思考比实现更重要!
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...
随机推荐
- Spring事务隔离级别和传播性
事务的隔离级别也分为四种: read uncommited(读未提交). read commited(读提交). read repeatable(读重复). serializable(序列化), 这四 ...
- cfile fopen fopen_s win10下打开文件失败
vc程序在win10下面使用fopen 打开文件失败,在网上查 了下是因为UAC权限的问题如下: 由于windows vista win7 win8 win 10 添加了UAC权限,所以会导致 在系统 ...
- 【FZSZ2017暑假提高组Day2】圆盘时钟
[问题描述] 作为出题人的小Z相信大家对上图这样的圆盘时钟都不会陌生——在理想圆盘时钟上,秒针每一分钟转一圈,分针每一小时转一圈,时针每12小时转一圈,它们均是匀速转动的,在0点时三条针均指向表盘上的 ...
- git的简单命令
git pull 拉下最新版本. git add . git commit 输入提交信息 esc返回 :wq保存 git push .git保存着当前仓库的信息.git bash here的时候,要确 ...
- Linux下NFS的搭建与配置
一.简介 1.NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. 2.NFS可实现Linux系统之间的文件 ...
- 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送
业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...
- Ambari2.7.3 和HDP3.1.0搭建Hadoop集群
一.环境及软件准备 1.集群规划 hdp01/10.1.1.11 hdp02/10.1.1.12 hdp03/10.1.1.13 hdp04/10.1.1.14 hdp05/10.1.1.15 a ...
- Springboot学习06-Spring AOP封装接口自定义校验
Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...
- Java15-java语法基础(十五)——内部类
java16-java语法基础(十五)内部类 一.内部类: 可以在一个类的内部定义另一个类,这种类称为内部类. 二.内部类分为两种类型: 1.静态内部类: 静态内部类是一个具有static修饰词的类, ...
- Vmware unknow Interface ens33
vmare打开虚拟网络编辑器,按图示操作