http://blog.csdn.net/vshuang/article/details/39647167    Android 内存管理 &Memory Leak & OOM 分析

单个应用可用的最大内存

Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。这个属性值是定义在/system/build.prop文件中的
dalvik.vm.heapstartsize=8m
它表示堆分配的初始大小,它会影响到整个系统对RAM的使用程度,和第一次使用应用时的流畅程度。
它值越小,系统ram消耗越慢,但一些较大应用一开始不够用,需要调用gc和堆调整策略,导致应用反应较慢。它值越大,这个值越大系统ram消耗越快,但是应用更流畅。

dalvik.vm.heapgrowthlimit=64m // 单个应用可用最大内存
主要对应的是这个值,它表示单个进程内存被限定在64m,即程序运行过程中实际只能使用64m内存,超出就会报OOM。(仅仅针对dalvik堆,不包括native堆)

dalvik.vm.heapsize=384m//heapsize参数表示单个进程可用的最大内存,但如果存在heapgrowthlimit参数,则以heapgrowthlimit为准.
heapsize表示不受控情况下的极限堆,表示单个虚拟机或单个进程可用的最大内存。而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机(这样设计就会在单个程序崩溃的情况下不会导致整个系统的崩溃)。
注意:在设置了heapgrowthlimit的情况下,单个进程可用最大内存为heapgrowthlimit值。在android开发中,如果要使用大堆,需要在manifest中指定android:largeHeap为true,这样dvm heap最大可达heapsize。

不同设备,这些个值可以不一样。一般地,厂家针对设备的配置情况都会适当的修改/system/build.prop文件来调高这个值。随着设备硬件性能的不断提升,从最早的16M限制(G1手机)到后来的24m,32m,64m等,都遵循Android框架对每个应用的最小内存大小限制,参考http://source.android.com/compatibility/downloads.html 3.7节。

通过代码查看每个进程可用的最大内存,即heapgrowthlimit值:
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
int memClass = activityManager.getMemoryClass();//64,以m为单位

或:

$adb shell getprop dalvik.vm.heapgrowthlimit

192m

$adb shell getprop dalvik.vm.heapsize

512m

$adb shell getprop dalvik.vm.heapstartsize

16m

http://hukai.me/android-training-managing_your_app_memory/  Android Training - 管理应用的内存

检查你应该使用多少的内存

正如前面提到的,每一个Android设备都会有不同的RAM总大小与可用空间,因此不同设备为app提供了不同大小的heap限制。你可以通过调用getMemoryClass())来获取你的app的可用heap大小。如果你的app尝试申请更多的内存,会出现OutOfMemory的错误。

在一些特殊的情景下,你可以通过在manifest的application标签下添加largeHeap=true的属性来声明一个更大的heap空间。如果你这样做,你可以通过getLargeMemoryClass())来获取到一个更大的heap size。

然而,能够获取更大heap的设计本意是为了一小部分会消耗大量RAM的应用(例如一个大图片的编辑应用)。不要轻易的因为你需要使用大量的内存而去请求一个大的heap size。只有当你清楚的知道哪里会使用大量的内存并且为什么这些内存必须被保留时才去使用large heap. 因此请尽量少使用large heap。使用额外的内存会影响系统整体的用户体验,并且会使得GC的每次运行时间更长。在任务切换时,系统的性能会变得大打折扣。

另外, large heap并不一定能够获取到更大的heap。在某些有严格限制的机器上,large heap的大小和通常的heap size是一样的。因此即使你申请了large heap,你还是应该通过执行getMemoryClass()来检查实际获取到的heap大小。

转载于:https://www.cnblogs.com/onelikeone/p/7112184.html

Android 查看每个应用的最大可用内存相关推荐

  1. Android 获取App可用内存

    以下就是获取App 内存的代码: int M = 1024*1024;Runtime r = Runtime.getRuntime();LogUtil.fussenLog().d("最大可用 ...

  2. Android 查看内存命令总结

    文章目录 内存相关概念解析 dumpsys meminfo procrank cat /proc/meminfo free vmstat 内存相关概念解析 一个进程占用了多少内存,主要有下述四种说法: ...

  3. android 查看系统允许内存,查看Android系统内存使用的方法

    方式一.使用dumpsys meminfo命令. 我们可以在adb shell 中运行dumpsys meminfo命令来得到进程的内存信息.在该命令的后面要加上进程的名字,以确定是哪个进程. 比如& ...

  4. Android手机总内存和可用内存

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

  5. 获取Android手机总内存和可用内存最佳方案

    Android手机的内存大小信息存放在手机系统的/proc/meminfo文件中,可以通过读取这个文件来获取内存信息. adb shell查看 通过adb shell命令,进入终端 adb shell ...

  6. 【转】android如何查看cpu的占用率和内存泄漏

    原文网址:http://www.cnblogs.com/yejiurui/p/3472765.html 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程 ...

  7. linux资源利用率检查_使用free命令查看实际内存占用(可用内存)

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位).而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内 ...

  8. linux下使用free命令查看实际内存占用(可用内存)

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位).而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内 ...

  9. Android 获取手机总内存和可用内存等信息

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

最新文章

  1. 模式窗口window.open造成Session丢失的解决方法
  2. java .classpath配置_轻松玩转Java配置的Classpath
  3. Android在Java获取组件,在Java中解析HTML以获取Android应用
  4. javascript冷门吗_分享几个html5冷门小知识
  5. U_boot 的 bootcmd 和bootargs参数详解
  6. LaTeX双栏模板插入通栏公式(跨栏插图)
  7. html中prependid的作用,UIForm与prependId =“false”中断
  8. linux6.3 dhcp,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  9. 微博广告推荐策略工程架构体系演进
  10. 3. 什么是icmp?icmp与ip的关系_公共关系与人际交往能力自主模式课程相关
  11. 第二章 对象以及变量的并发访问
  12. python编写命令行框架_Python2和3的面向命令的命令行框架是什么?
  13. 时间序列 ARMA 模型实战!
  14. 推荐Python、Django中文文档地址
  15. [ArcGIS] 空间分析(二) 矢量数据
  16. bootstrap模板免费下载
  17. 网页视频之ACC格式解析
  18. 【Tensorflow2.0】8、tensorflow2.0_hdf5_savedmodel_pb模型转换[1]
  19. ZOJ 3551 Bloodsucker(概率)
  20. Android WebView简要介绍和学习计划

热门文章

  1. java zoneoffset,java - 如何在java8中获取默认的ZoneOffset? - SO中文参考 - www.soinside.com...
  2. python学习实例(7)
  3. C++(STL):25 ---序列式容器stack源码剖析
  4. (八)深入浅出TCPIP之TCP长连接与短连接详解
  5. 无限踩坑系列(4)-远程登入服务器
  6. Python模块(1)-Argparse 简易使用教程
  7. 深度学习(05)--典型CNN结构(VGG13,16,19)
  8. kaggle(05)---Event Recommendation Engine Challenge(基础版)
  9. python3之后版本读取网页的内容
  10. 264,avs重要的变量: