Android虚拟机内存参数说明

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指定的堆大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,可能是由于以下原因导致Android Studio虚拟机不显示: 1. 您的计算机配置不足,无法支持虚拟机的运行。 2. 您的虚拟机设置不正确,需要重新设置。 3. 您的Android Studio版本过旧,需要升级到最新版本。 4. 您的显卡驱动不兼容,需要更新显卡驱动。 建议您先检查以上原因,如果问题仍然存在,可以尝试重新安装Android Studio或者联系技术支持。 ### 回答2: 当Android Studio虚拟机不显示时,可能有以下几种原因导致: 1. 虚拟机设置错误:首先要确保虚拟机的配置正确。可以通过进入“AVD Manager”(Android Virtual Device Manager)来检查虚拟机的设置。确认虚拟机的API级别、屏幕分辨率等参数与设备需求相匹配。 2. 安装错误:如果虚拟机无法显示,可能是因为未正确安装Android Studio以及相关的SDK组件。建议按照Android Studio官方文档的指引进行完整的安装和设置。 3. 图形加速问题:虚拟机需要使用图形加速技术(如Intel HAXM或者AMD-V)来提高性能和显示效果。如果未正确安装或启用这些技术,可能导致虚拟机无法显示。可以检查电脑的BIOS设置,确保相关的硬件虚拟化功能已经启用。 4. 资源不足:如果电脑的硬件资源(如内存、显卡等)不足,也可能导致虚拟机无法正常显示。可以尝试关闭其他运行的程序,释放部分资源,或者考虑升级电脑硬件以满足虚拟机的要求。 5. 其他问题:如果以上方法仍然无法解决虚拟机不显示的问题,可能是因为Android Studio或相关组件的版本不兼容,或者存在其他未知的软件或硬件故障。建议尝试重新安装Android Studio,升级相关组件,或者寻求技术支持来解决问题。 综上所述,当Android Studio虚拟机不显示时,可以尝试检查虚拟机设置、重新安装和升级相关组件、确保图形加速技术正常工作以及释放硬件资源等方法来解决问题。 ### 回答3: 当Android Studio的虚拟机不显示时,可能是由于以下几个原因: 1. 配置问题:首先要确保你的计算机满足Android Studio的最低系统要求,包括操作系统版本、处理器等。检查一下你的配置是否符合要求,并且确保已经下载并安装了最新版的Android Studio。 2. 缺少硬件加速:Android Studio的虚拟机需要使用硬件加速来保证正常运行。在某些情况下,可能会发生硬件加速不可用的情况,导致虚拟机无法显示。你需要检查你的计算机的显卡驱动程序是否已经更新到最新版,并且确保在BIOS设置中启用了硬件加速功能。 3. 虚拟机设置问题:在Android Studio中,你可以调整虚拟机的设置,包括分配的内存、分辨率等。如果你的虚拟机不显示,可能是因为设置不当。尝试重新设置虚拟机参数,特别是分配的内存,将其增加到适当的大小。 4. 其他软件冲突:有些情况下,其他软件可能会与Android Studio的虚拟机产生冲突,导致其不显示。你可以尝试关闭其他运行中的程序,特别是一些占用大量系统资源的应用程序,然后重新启动Android Studio,看是否能够解决问题。 如果以上方法仍然无法解决问题,建议你参考Android Studio的官方文档或者在相关的技术社区中寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值