经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android获取当前应用分配的最大内存和目前使用内存的方法
来源:jb51  时间:2019/2/22 9:08:47  对本文有异议

在Android里,程序内存被分为2部分:native和dalvik,dalvik就是我们普通的Java使用内存,分析堆栈的时候使用的内存。我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制. Android 原生系统一般默认16M,但是国内手机一般都是特殊定制的,都有修改系统的内存大小,所有有时候,要查看具体应用系统分配的内存大小,还是需要实际去测试的,

测试方法如下:

方式一:

  1. ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  2. //最大分配内存
  3. int memory = activityManager.getMemoryClass();
  4. System.out.println("memory: "+memory);
  5. //最大分配内存获取方法2
  6. float maxMemory = (float) (Runtime.getRuntime().maxMemory() * 1.0/ (1024 * 1024));
  7. //当前分配的总内存
  8. float totalMemory = (float) (Runtime.getRuntime().totalMemory() * 1.0/ (1024 * 1024));
  9. //剩余内存
  10. float freeMemory = (float) (Runtime.getRuntime().freeMemory() * 1.0/ (1024 * 1024));
  11. System.out.println("maxMemory: "+maxMemory);
  12. System.out.println("totalMemory: "+totalMemory);
  13. System.out.println("freeMemory: "+freeMemory);

方式二:

  1. Runtime rt=Runtime.getRuntime();
  2. long maxMemory=rt.maxMemory();
  3. log.i("maxMemory:",Long.toString(maxMemory/(1024*1024)));
  4. 這個可以直接得到app可使用的最大memory size算出來是MB, 获得的是heapgrowthlimit
  5. 1maxMemory()方法获取系统可为APP分配的最大内存,
  6. 2totalMemory() 获取APP当前所分配的内存heap空间大小。
  7. 先看机器的内存限制,在/system/build.prop文件中:
  8. heapgrowthlimit就是一个普通应用的内存限制,用ActivityManager.getLargeMemoryClass()获得的值就是这个。
  9. heapsize是在manifest中设置了largeHeap=true 之后,可以使用的最大内存值
  10. 结论就是,设置largeHeap的确可以增加内存的申请量。但不是系统有多少内存就可以申请多少,而是由dalvik.vm.heapsize限制。
  11. 你可以在app manifest.xml largetHeap=true
  12. 可以申請較多的記憶體 ,但還是有機會爆掉.
  13. <application
  14. .....
  15. android:label="XXXXXXXXXX"
  16. android:largeHeap="true">
  17. .......
  18. </application>
  19. cat /system/build.prop //读取这些值
  20. getprop dalvik.vm.heapsize //如果build.prop里面没有heapsize这些值,可以用这个抓取默认值
  21. setprop dalvik.vm.heapsize 256m //设置
  22. ----------------------- build.prop 部分内容 ---------------------
  23. dalvik.vm.heapstartsize=8m
  24. dalvik.vm.heapgrowthlimit=96m
  25. dalvik.vm.heapsize=384m
  26. dalvik.vm.heaputilization=0.25
  27. dalvik.vm.heapidealfree=8388608
  28. dalvik.vm.heapconcurrentstart=2097152
  29. ro.setupwizard.mode=OPTIONAL
  30. ro.com.google.gmsversion=4.1_r6
  31. net.bt.name=Android
  32. dalvik.vm.stack-trace-file=/data/anr/traces.txt

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号