Android 获取App可用内存

以下就是获取App 内存的代码:

int M = 1024*1024;
        Runtime r = Runtime.getRuntime();

        LogUtil.fussenLog().d("最大可用内存:" + r.maxMemory() / M + "M");
        LogUtil.fussenLog().d("当前可用内存:" + r.totalMemory()/ M + "M");
        LogUtil.fussenLog().d("当前空闲内存:" + r.freeMemory() / M + "M");
        LogUtil.fussenLog().d("当前已使用内存:" + (r.totalMemory() - r.freeMemory()) / M + "M");

另外在Manifest application 里面添加

android:allowBackup="true"   
可以增加最大可用内存,我的测试机 使用了 增加可用内存之后的Log
Android 获取App可用内存_第1张图片

1,maxMemory

Android系统用的是Dalvik虚拟机,每个App的最大可用内存由系统指定(在/system/build.prop文件中有定义),如HTC E8手机的内存为2G,App的最大可用内存为192M。如果需要更大的内存的话,可以在AndroidManifest.xml中,给Application标签配置“android:largeHeap="true"”属性。这样的话,这台手机就可以最大获得512M内存了。


 你可能会很好奇,为什么有些APP(比如大型游戏)可以超过这个值?那是因为Java内存又分为Java Heap和Native Heap,Native Heap是不受该值约束的。像C/C++的内存都是在Native Heap中分配的。另外Bitmap是在Java Heap中分配的,我们开发过程中经常遇到由Bitmap引起的OOM,这就是一个例子。

2,totalMemory

该函数用于获取JVM当前可用内存。如果程序需要更多的内存,它最多不能超过maxMemory。

 如果设置为“-Xms1024m -Xmx1024m”,那么totalMemory=maxMamory。


3,freeMemory

该函数用于获取JVM可以被释放的内存。如果调用System.gc()的话,这部分内存将会被释放掉。

 

借一张图片来直观表达一下三者的关系。



开发中应该控制好内存,避免OOM的发生。


你可能感兴趣的:(Android基础)