ART的比较复杂,这里分析dalvik虚拟的的参数,和art参数的概念是一致的

-xms: 虚拟机堆的起始大小,启动时申请的堆内存大小 prop:dalvik.vm.heapstartsize指定

-xmx: 虚拟机堆使用的虚拟内存最大大小 prop: dalvik.vm.heapsize 指定

-XX:HeapGrowthLimit: 非largeHeap应用最大使用的堆内存 prop: dalvik.vm.heapgrowthlimit

-XX:HeapMinFree 堆最小空闲值,空闲值小于该值时应该扩容堆(调整软限制) prop:dalvik.vm.heapminfree 指定

-XX:HeapMaxFree 堆最大空闲值,大于该值时应该堆缩容(调整软限制) prop: dalvik.vm.heapmaxfree

-XX:HeapTargetUtilization 目标利用率,扩容和缩容的根据目标利用率找到合适的目标堆大小(调整软限制) prop: dalvik.vm.heaptargetutilization

-XX:+DisableExplicitGC 禁止显式gc

首先Android使用mspace系列函数进行内存管理

包括如下几个重要函数

DLMALLOC_EXPORT mspace create_mspace(size_t capacity, int locked) 创建一块连续的虚拟内存

DLMALLOC_EXPORT size_t destroy_mspace(mspace msp) 释放

这两个操作相当于批发一块虚拟内存,其实就是使用系统调用brk申请虚拟内存

DLMALLOC_EXPORT void* mspace_malloc(mspace msp, size_t bytes);

DLMALLOC_EXPORT void mspace_free(mspace msp, void* mem);

这两个函数用于从批发的连续虚拟内存中申请和释放内存,相当于零售操作

DLMALLOC_EXPORT size_t mspace_footprint(mspace msp);

当我们零售内存的时候是把我们批发来的一整款虚拟内存进行分割,为了方便管理以及减少碎片,我们肯定是从最小的内存开始向外零售,

mspace_footprint函数的返回值代表我们现在切割到整块虚拟内存的最大值

size_t mspace_set_footprint_limit(mspace msp, size_t bytes) 这个函数用于管理我们切割整块虚拟内存的行为,当我们调用mspace_malloc去申请内存的时候,mspace_footprint+

bytes是不允许超过mspace_set_footprint_limit设置的footprint_limit的,如果超过了,则直接分配失败,返回NULL

1 android虚拟机就是使用这些函数去管理内存的,首先当虚拟机初始化完成后会创建堆,使用create_mspace创建一块连续虚拟内存,

也就是我们使用的-xmx指定的内存大小(注意这里是虚拟内存,由于操作系统的页面映射机制,这里并没有映射真正的物理内存,

也就是说vss现在是有值的)

2 然后会使用mspace_set_footprint_limit 函数去限制可分配的内存大小。这个值最开始设置成-xms指定的大小。所以我们的堆一开始在申请内存的时候,都会成功,直到第一次超出-xms大小,才会出发gc,或者引起堆的增长

3 那么堆是怎样增长的呢,在分配内存的时候首先会尝试gc,如果gc后还是分配不到的话,就会通过mspace_set_footprint_limit增大可分配大小来扩展堆,这样就可以分配到内存了

4 另外三个参数 -XX:HeapMinFree -XX:HeapMaxFree -XX:HeapTargetUtilization是指导我们对堆进行扩展和收缩的。 在gc的过程中我们会发现堆的空闲内存可能小于-XX:HeapMinFree 或者大于-XX:HeapMaxFree,这时候我们

的堆大小就不合适了,再进行内存分配的话可能浪费内存或者频繁出发gc,所以我们就会进行堆的修剪,指导的参数就是-XX:HeapTargetUtilization,我们需要把堆的大小修剪为-XX:HeapTargetUtilization指定的利用率。那么怎么

计算堆利用率呢? 也就是怎么知道堆的空闲大小?? 就是用mspace_set_footprint_limit减去mspace_footprint,这样就得到了空闲大小。(注意mspace_footprint这个值会在分配对象和释放对象的时候进行加减)

5 再来说说-XX:HeapGrowthLimit, 这个参数在应用没有指定android:largeHeap的时候,该值就是前面说的-xmx指定的最大堆大小,如果设置了android:largeHeap则-xmx使用-xmx指定的堆大小

Android虚拟机参数意义,Android虚拟机参数说明相关推荐

  1. 启动rrt什么意思_python学习第144课--创建虚拟机、设置虚拟机参数以及启动虚拟机...

    [每天几分钟,从零入门python编程的世界!] 上节我们介绍了下载虚拟机以及centOS的相关事项,现在我们创建虚拟机. ●创建虚拟机 安装好virtualbox之后,我们点击Oracle VM V ...

  2. android 摄像头参数,获取Android设备上的详细的摄像头信息

    原标题:获取Android设备上的详细的摄像头信息 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头 ...

  3. android gravity参数,Gravity - [ Android中文手册 ] - 在线原生手册 - php中文网

    Gravity 版本:Android 4.0 r1 结构 继承关系 public class Gravity extends Object java.lang.Object android.view. ...

  4. java虚拟机参数优化_JAVA虚拟机JVM参数优化(2):垃圾收集算法选择

    JAVA虚拟机JVM优化重要性,昨天JAVA虚拟机JVM参数优化(1)文章中已经描述,今天我们来讨论JAVA虚拟机在不同性能要求下如何选择三种垃圾收集算法. JVM内部结构如下图所示: 串行收集用于单 ...

  5. android aspectj 参数,在Android项目中使用AspectJ

    什么是AOP AOP是 Aspect Oriented Programming 的缩写,即面向切面编程,和日常遇到的面向对象OOP编程不同的是,OOP是将功能模块化对象化,AOP是针对同一类的问题统一 ...

  6. android pppd参数介绍,android 3G pppd 调试记录

    android 3G pppd 调试记录. 1.  JAVA 部分 android/development/data/etc/apns-conf_sdk.xml   --->  system/e ...

  7. android 请求参数打印,android retrofit 请求参数格式RequestBody的方法

    以前都是使用 Observable login(@HeaderMap Map headers, @QueryMap Map map); @QueryMap方式,将参数放入map中传输的 现在改用Req ...

  8. android 请求参数打印,Android开发-----关于解决Retrofit打印HttpLog和设置连接超时的问题...

    问题, 1 由于Retrofit默认连接超时时间只有10s 某些情况下可能连接时间会超过10s,这个时候就会报出SocketTimeoutException 这个时候我们就需要自己设置超时间, 2 很 ...

  9. android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...

    自己在学习控件的时候,学到关于EditText的addTextChangedListener()方法,想做一个类似发微博限制字数为140那样的功能,以此文记录上机过程中发现的一些问题.在做这个的时候, ...

  10. android中dalvik虚拟机参数

    因为要做一个小内存项目,所以提前对虚拟机参数设定查资料,学习设定. 1,dalvik.vm.heapstartsize 堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗.这个值越小,系 ...

最新文章

  1. Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范
  2. poj1716(差分约束+SPFA)
  3. jdk1.6连接sqlserver2005
  4. 牛客 - 车辆调度(dfs)
  5. form标签的action之前 加密_金士顿KC2000自加密功能测试
  6. MyBatis从入门到精通:update用法、delete用法
  7. 【Python3之内置函数】
  8. 【Computer Organization笔记28】总复习
  9. java insert 返回主键_MyBatis中insert操作返回主键的实现方法 – java – www.cfei.net
  10. SQL Server 2012 中 SSAS 多维数据浏览器已经废除
  11. I2C 总线详解-转
  12. matlab高斯消去法解线性方程组,高斯消元法—求解线性方程组与实例分析应用.pdf...
  13. 《给你的答复:关于朋友或怀疑朋友或怀疑》
  14. 前端bugger 后端debug 介绍系统内部逻辑 压测新增订单接口 tps上不去 ,oom ,常见性能问题 ,性能分析思路
  15. openwrt安装GPS设备,使用GPSD获取GPS信息
  16. 树莓派无法获取ipv6公网地址和dns解析失败的问题
  17. 炫富神器 | 辣条专业国内首开,网友:中国吃货石锤了 ​!
  18. selinux 设置的彻底理解 并要 熟练经常的使用
  19. 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路
  20. fiddler编程猫死活hook不到的解决办法之一

热门文章

  1. 35岁的程序员:第9章,女测试
  2. js一键复制并调起微信客户端
  3. 【有机】镍催化非活化烯烃的不对称氢烷基化构建全烷基取代的饱和三级碳手性中心...
  4. 这些数据结构基本概念你晓得几个嘞?
  5. 使用青龙面板BP京东豆
  6. 〖Python〗-- 面向对象编程、继承、组合、接口和抽象类
  7. SAMA5D3X-EK 嵌入式linux内核编译启动及通过nfs通过网络启动文件系统及文件系统镜像的制作
  8. Python查询快递订单信息
  9. PyTorch中通过torch.save保存模型和torch.load加载模型介绍
  10. python做饼图出现重影_解决echarts中饼图标签重叠的问题