关于heapsize & heapgrowthlimit

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为单位

获取Android手机应用内存大小

手机不同其性能也不同,手机本身内存可能有大有小,所以针对每个应用的内存大小也不相同。

方法一:
[html] view plain copy

  1. adb shell  getprop | grep dalvik.vm.heapgrowthlimit
  2. [dalvik.vm.heapgrowthlimit]: [64m]

方法二:
[java] view plain copy

  1. ActivityManager activityManager =(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
  2. activityManager.getMemoryClass();
  3. activityManager.getLargeMemoryClass();

方法三:
[java] view plain copy

  1. adb shell cat /system/build.prop
  2. dalvik.vm.heapstartsize=8m
  3. dalvik.vm.heapgrowthlimit=64m
  4. dalvik.vm.heapsize=256m

方法四:[java] view plain copy

  1. Runtime.getRuntime().maxMemory()

关于heapsize heapgrowthlimit相关推荐

  1. Modify Android dalvik vm heapsize

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 要修改系 ...

  2. 转 《JVM HeapSize Permsize》

    java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制.否则可能导致应用程序宕掉. 举例说明含义:-Xms128m 表示JVM Heap(堆内存)最小尺寸128MB, ...

  3. JVM HeapSize Permsize

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! java ...

  4. Android 内存管理 amp;Memory Leak amp; OOM 分析

    1.Android 流程管理&内存 Android主要应用在嵌入式设备其中.而嵌入式设备因为一些众所周知的条件限制,通常都不会有非常高的配置,特别是内存是比較有限的. 假设我们编写的代 码其中 ...

  5. Android开发笔记——常见BUG类型之内存泄露与线程安全

    一.内存泄露 1.很抱歉,"XXX"已停止运行.OOM? 怎样才能让app报OOM呢?最简单的办法如下: Bitmap bt1 = BitmapFactory.decodeReso ...

  6. Android之获得内存剩余大小与总大小

    方法一: 如何查看android对应用的内存限制 每款手机对应用的限制都是不一样的,毕竟硬件不同,我们可以使用如下方式来查看单独的应用可使用的最大内存: 执行命令: Shell代码   adb she ...

  7. 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

    文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...

  8. Android之内存管理-内存监测-内存优化

    推荐文章:Android进程与内存及内存泄漏 Android之内存管理 1.1 Dalvik Dalvik虚拟机是Android程序的虚拟机,是Android中Java程序的运行基础.其指令集基于寄存 ...

  9. Android Zygote分析

    1. app_process到zygote zygote本身是一个Native应用程序,和驱动.内核均无关系,zygote是由init进行根据init.rc文件中的配置进行创建的,具体的配置代码如下: ...

最新文章

  1. mysql 速度检索
  2. linux系统报错01031,在Linux环境下设置 ora-01031:insufficient privileges解决方法总结
  3. php5.2通过saprfc扩展远程连接sap730成功案例
  4. 这几种Java异常处理方法,你会吗?
  5. java写左侧导航栏界面,jQuery----左侧导航栏面板切换实现
  6. linux系统优化思路
  7. Pentium 4处理器架构/微架构/流水线(1) - 概述
  8. Win10安装配置CLion+MinGW
  9. hdu,2050,折线分割平面
  10. 如何检测浏览器所支持的最小字体大小
  11. SPSS基础教程—怎样对数据进行综合评价排名
  12. 2020定额水平测算——“15定额工程”一键转换“20定额工程”
  13. 无锡科技职业学院院长孙兴洋应邀到美和易思作专题讲座
  14. 基于单片机的自动追日系统设计_基于单片机控制的简易逐日式太阳能发电系统...
  15. vs 应用程序无法正常启动0xc000007b 可能与VS中DLL引用有关
  16. mysql服务器存储视频文件,把视频文件直接存储到mysql数据库的方法
  17. 笔记本电脑的电池损耗度——命令符查看
  18. 打造企业级云深度学习平台——小米云深度学习平台的架构设计与实现
  19. 将应用程序设置可信任(在win10操作系统)
  20. pta mysql训练题集(241-260)

热门文章

  1. python3创建类_python3 metaclass--创建类的过程分析
  2. 彻底搞懂 python 中文乱码问题_Python BeautifulSoup中文乱码问题的2种解决方法
  3. Sysfs_linux设备底层模型
  4. 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询
  5. 拓展Revit的方式
  6. Java面试宝典2013版(11版块1000题)
  7. 四、python沉淀之路--元组
  8. 2017.10.23学习知识总结回顾及编写新网页
  9. 命令行重启Oracle数据库
  10. nginx配置中root与alias的区别