以下就是获取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