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

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的发生。
————————————————
版权声明:本文为CSDN博主「迷途可达鸭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36838630/article/details/79457350

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值