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)
这两个操作相当于批发一块虚拟内存,其实就是使用系统调用sys_mmap申请虚拟内存

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_mallocmspace_footprint+
bytesmspace_set_footprint_limitfootprint_limitNULL

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虚拟机内存参数说明相关推荐

  1. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  2. 【android开发】Android防止内存溢出浅析

    近期项目做得差点儿相同了,測试出现了一些问题,当中一个就是内存溢出问题,在三星手机上測试最easy出现内存溢出,在其它手机上,比方华为就没有发生,也是比較郁闷.这个问题在之前的公司,做项目时也遇到过, ...

  3. 【Java 虚拟机原理】Dalvik 虚拟机 ( 简介 | CPU 指令集 | Dalvik 虚拟机内存 )

    文章目录 一.Dalvik 虚拟机简介 二.CPU 指令集 三.Dalvik 虚拟机内存 一.Dalvik 虚拟机简介 Android 5.05.05.0 之前使用的是 Dalvik 虚拟机 , 5. ...

  4. 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码

    本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

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

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

  6. QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)

    一.提升性能核心要素 1.将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结 2.在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可 二.AND ...

  7. Android Flutter 内存机制初探

    阿里妹导读:闲鱼技术团队一直在探索如何使用Flutter来统一移动App开发.移动设备上的资源有限,内存使用成了日常开发中的常见问题.那么,Flutter是如何使用内存,又会对Native App的内 ...

  8. eclipse查看Android应用内存使用情况

    使用DDMS Heap查看Android应用内存情况 首先,我们在DDMS的界面的设备选项中找到手机设备,可以看到它里面正在运行的进程: 点一下"Update Heap"图标,然后 ...

  9. android 避内存溢出,Android避免内存溢出(Out of Memory)方法总结

    Android避免内存溢出(Out of Memory)方法总 结 避免内存溢出的方法,主要是对以下三个方面对程序进行优化武汉Android培训 内存引用 在处理内存引用之前,我们先来复习下什么是强引 ...

最新文章

  1. Long-read sequencing for improved analysis
  2. python计算某年某月多少天_Python编程实现输入某年某月某日计算出这一天是该年第几天的方法...
  3. Java面试题及答案,mysql可视化工具
  4. linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A
  5. Leetcode--200. 岛屿数量
  6. oracle中创建游标,oracle 存储过程创建游标
  7. ”扶我起来,我还能学!“ 之ES2021 抢先尝
  8. python 删除set指定值_python中的变量和数据类型(三)
  9. 计算机网络模拟校园,计算机网络实验——模拟校园网设计
  10. Ubuntu源码方式安装lua luarocks
  11. 334个地级市名单_2016年最新中国地级市名单
  12. sublime text 3211 安装中文包
  13. prometheus-预警-6
  14. java读书网站课程设计_Java课程设计
  15. 正大市场监管总局、发改委、证监会联合提醒告诫部分铁矿石
  16. python-selenium自动化测试网页
  17. benchmark TPC-H postgreSQL
  18. 宏的录制以及在Visual Basic中显示代码
  19. 2018华为暑假实习面试
  20. 环洋调研报告-2021年全球元宇宙NFT行业调研及趋势分析报告

热门文章

  1. 日本推出可实时监测地震烈度iPhone应用软件
  2. PyTorch保存中间变量的导数值
  3. 番茄花园 Ghost XP SP3 2013极速装机驱动版
  4. c语言 高斯日记,高斯日记 – 蓝桥杯
  5. 庆祝祖国70周年华诞,愿祖国繁荣昌盛!
  6. 新能源汽车为何得以推广?
  7. 求助:新浪微博 Python API在使用statuses/show接口时请求参数id与python内置函数id之间的冲突
  8. godaddy 2013 .com续费优惠码
  9. 大数据时代,个人隐私如何保护?杨幂,张若昀纷纷斥责隐私遭到泄露......
  10. 联发科的turn key模式