由于Android系统的硬件资源是至关有限的,并且分配给一个应用的资源更为有限,尤为是内存。当应用忽然申请的内存大于容许的最大值的时候,就会出现OOM。java
若是想要获取App的内存使用状况,可使用如下方法:android
final int M = 1024 * 1024; 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程序:ui
java -Xms64m -Xmx1024m App01
final long usedMemory = totalMemory() - freeMemory();
maxMemory限制了当前应用可以使用的最大内存值,而最大内存值基本上就决定了OOM出现的几率,目前可以修改最大内存值的方式就是,在Manifest里面添加Application标签:spa
android:largeHeap="true"
此时再测试一下,上面的代码,就基本上能够看到,最大内存值变大了。code
具体的其余避免OOM的方式,目前很少赘述,写本文也是由于在正常使用时发现,即便使用了了解的避免OOM的方式时但仍是没法避免OOM,只能采起修改一些应用配置信息来避免OOM。xml