ART虚拟机参数说明

本文深入解析ART虚拟机的参数设置,重点关注如-verbose、-Xbootclasspath、-Xss、-XX:LongPauseLogThreshold和-XX:UseTLAB等参数。这些参数对于GC行为、线程栈大小、日志记录以及内存分配策略有着重要影响。在Android 5.1.1版本中,启动ART的具体参数配置实例也进行了展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

propertyJVM参数含义取值备注

dalvik.vm.checkjni || ro.kernel.android.checkjni

取true|false

-Xcheck:jni当调用jni函数时,打开jni检查  


-Xjnigreflimit:<N>设置JNI全局引用的最大数量整数,如2000 

dalvik.vm.execution-mode

取int:portable|int:fast|int:jit

-Xint:portable

-Xint:fast

-Xint:jit

指后端类型  
dalvik.vm.stack-trace-filedalvik.vm.stack-trace-file   

dalvik.vm.check-dex-sum

取true|false

dalvik.vm.check-dex-sum   

log.redirect-stdio

取true|false

-Xlog-stdio将stdout/stderr输出定位到log  
dalvik.vm.enableassertions-ea:<string>   
dalvik.vm.jnioptsdalvik.vm.jniopts   
 -verbose:gc   
dalvik.vm.heapstartsize-Xms堆栈开始大小4m 
dalvik.vm.heapsize-Xmx 16m 
 -XX:mainThreadStackSize=<N>K主线程解释模式下堆栈大小  
dalvik.vm.jit.codecachesize-Xjitcodecachesize:设置jit code的大小。0表示关闭  
dalvik.vm.heapgrowthlimit-XX:HeapGrowthLimit=   
dalvik.vm.heapminfree-XX:HeapMinFree=   
dalvik.vm.heapmaxfree-XX:HeapMaxFree=   
dalvik.vm.heaptargetutilization-XX:HeapTargetUtilization=   
dalvik.vm.nonmovingspace-XX:NonMovingSpaceCapacity=   

ro.config.low_ram

取true | false

-XX:LowMemoryMode   
dalvik.vm.gctype-Xgc:   
dalvik.vm.backgroundgctype-XX:BackgroundGC=   

dalvik.vm.dexopt-flags

v=n|r|a

o=n|v|a|f

m=y

if (v==n) dalvik.vm.dexopt-flags

if (v==r)-Xverify:remote

if (v==a) -Xverify:all

if (o==n) -Xdexopt:none

if (o==v) -Xdexopt:verified

if (o==a) -Xdexopt:all

if (o==f) -Xdexopt:full


if (m==y) {

-Xdexopt:full

-Xgc:precise

}

   
dalvik.vm.lockprof.threshold-Xlockprofthreshold:   
dalvik.vm.jit.op-Xjitop:对于特定的字节码,强制以解释模式执行  
dalvik.vm.jit.methoddalvik.vm.jit.method对特定方法,强制以解释模式执行  

vold.decrypt

取值trigger_restart_min_framework|1

-Ximage-compiler-option

--compiler-filter=verify-none

跳过代码编译,以最新方式启动一个framework。用在data分区加密后输入密码  
dalvik.vm.image-dex2oat-Xms-Xms   
dalvik.vm.image-dex2oat-Xmx-Xmx   
dalvik.vm.image-dex2oat-filter--compiler-filter=   
 

-Ximage-compiler-option

--image-classes=/system/etc/preloaded-classes

   
 

-Ximage-compiler-option

--compiled-classes=/system/etc/compiled-classes

   
dalvik.vm.image-dex2oat-flags-Ximage-compiler-option   
dalvik.vm.dex2oat-Xms    
dalvik.vm.dex2oat-Xmx    
dalvik.vm.extra-opts    
dalvik.vm.profiler-Xenable-profiler   
dalvik.vm.profile.start-immed-Xprofile-start-immediately   
dalvik.vm.profile.period-secs-Xprofile-period:   
dalvik.vm.profile.duration-secs-Xprofile-duration:   
dalvik.vm.profile.interval-us-Xprofile-interval:   
dalvik.vm.profile.backoff-coeff-Xprofile-backoff:   
dalvik.vm.profile.top-k-thr-Xprofile-top-k-threshold:   
dalvik.vm.profile.top-k-ch-thr-Xprofile-top-k-change-threshold:   
dalvik.vm.profiler.type-Xprofile-type:   
dalvik.vm.profile.stack-depth-Xprofile-max-stack-depth:   
ro.dalvik.vm.native.bridge-XX:NativeBridge=   
     
     

ART中对参数的分解在ParsedOptions::Parse (runtime/parsed_options.cc)


-verbose:compiler|gc|heap|jdwp|jni|monitor|signals|startup|third-party-jni|threads|verifier


GC的几个重要参数

参数取值默认值
-XX:ParallelGCThreads=<N>整数。并行GC的线程个数CPU核数-1.
这是定义除了主GC线程外的并行线程。对于单核来说,就是没有并行的GC线程。
-Xms<N>kK|mM|gGheap初始化大小,单位可以是k, m, g。2M
-Xms<N>kK|mM|gGheap初始化大小,单位可以是k, m, g。2M
-Xmx<N>kK|mM|gGheap最大大小,单位可以是k, m, g。256M
-XX:HeapMinFree=<N>kK|mM|gGheap最小free空间,单位可以是k, m, g。0.5M
-XX:HeapMaxFree=<N>kK|mM|gGheap最大free空间,单位可以是k, m, g。2M
-XX:NonMovingSpaceCapacity=<N>kK|mM|gGheap不可移动数据大小,单位可以是k, m, g。64M
-XX:HeapTargetUtilization=(0.1-0.9)堆内存的利用率0.5
-XX:ForegroundHeapGrowthMultiplier=heap增长乘数2.0
-XX:ConcGCThreads=不暂停时GC线程数0


-Xbootclasspath:

-classpath 或-cp

-Ximage:  boot.art的地址。如 -Ximage:/data/dalvik-cache/arm64/boot.art

-Xss<N>K|M|G  定义线程栈的默认大小。如果调用java.lang.Thread.nativeCreate的时候堆栈传递0,则使用该值

-XX:LongPauseLogThreshold=<N> GC 停顿后输出gc log的最长时间。单位为ms

-XX:LongGCLogThreshold=<N>  GCLog输出的间隔。单位为ms

-XX:UseTLAB 有该标志时,表示使用线程本地分配策略(Thread Local Allocation Buffer),TLAB分配时可以避免线程同步。



anroid 5.1.1中,启动ART虚拟机的实际参数例子

-Xzygote
-Xstacktracefile:/data/anr/traces.txt
exit
vfprintf
sensitiveThread
-verbose:gc
-Xms8m
-Xmx512m
-XX:mainThreadStackSize=24K
-XX:HeapGrowthLimit=256m
-XX:HeapMinFree=512k
-XX:HeapMaxFree=8m
-XX:HeapTargetUtilization=0.75
-XX:NonMovingSpaceCapacity=96m
-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y
-Ximage-compiler-option
--runtime-arg
-Ximage-compiler-option
-Xms64m
-Ximage-compiler-option
--runtime-arg
-Ximage-compiler-option
-Xmx64m
-Ximage-compiler-option
--image-classes=/system/etc/preloaded-classes
-Xcompiler-option
--runtime-arg
-Xcompiler-option
-Xms64m
-Xcompiler-option
--runtime-arg
-Xcompiler-option
-Xmx512m
-Duser.language=zh
-Duser.region=CN


<think>好的,我现在需要解决用户的问题:如何增大dex2oat32进程的内存分配限制,使其超过24M。首先,我需要了解dex2oat32是什么以及它在Android系统中的作用。 从用户提供的引用[3]中,dex2oat32应该是与编译相关的工具,因为编译过程中提到了通过dex命令将.class文件处理生成classes.dex,然后打包成APK。此外,引用[4]提到了JIT和AOT编译,其中dex2oat可能负责将DEX文件编译成本地机器码(AOT编译)。因此,dex2oat32是Android运行时用来优化应用性能的重要组件,它影响应用安装时的编译速度和运行效率。 用户提到当前的内存分配上限是24M,想要增加这个限制。需要知道如何调整dex2oat的参数。根据经验,Android系统通常通过系统属性或构建配置来调整这类参数。例如,dalvik.vm.heapsize在引用[1]中被提到是限制Java堆的,但native堆不受此限制,可能dex2oat32属于native进程,所以需要不同的方法。 接下来,我需要查找dex2oat相关的系统参数。可能的参数包括--dex2oat-memory-limit或者-Xmx之类的JVM参数。不过,dex2oat是ART虚拟机的一部分,可能使用不同的配置方式。查阅资料,dex2oat的选项可以通过系统属性persist.sys.dalvik.vm.lib.extra-args来传递,或者修改系统构建配置如build.prop。 例如,可以尝试在设备的/system/build.prop文件中添加或修改以下行: dalvik.vm.dex2oat-flags=--memory-limit=48M 不过需要注意,这里的参数是否正确以及设备是否有权限修改系统文件。另外,不同的Android版本可能有不同的参数名称,需要确认具体版本的支持情况。 另外,引用[4]提到JIT和AOT的内存管理,其中代码缓存的大小可能影响性能,但这里的问题是关于dex2oat的内存分配,可能涉及编译器本身的内存使用限制。可能需要调整dex2oat的堆大小参数,例如通过-Xmx48M来设置最大堆内存。 但是,由于dex2oat是系统进程,普通应用可能无法直接修改其参数,需要root权限或者修改系统镜像。用户可能需要解锁bootloader,刷入自定义Recovery,或者使用Magisk模块来修改系统配置。此外,不同的设备厂商可能有不同的实现,需要具体分析。 还需要注意,增加内存限制可能带来更高的内存占用,导致系统不稳定或耗电增加,需谨慎操作。因此,建议用户仅在必要时进行调整,并确保设备支持。</think>要调整dex2oat32进程的内存分配限制,需通过系统级参数配置。以下是具体步骤和方法: --- ### 操作步骤 1. **Root权限获取** 修改系统参数需解锁Bootloader并获取Root权限,否则无法修改受保护的系统文件。 2. **修改dex2oat编译参数** 在`/system/build.prop`文件中添加或调整以下参数: ```properties dalvik.vm.dex2oat-flags=--runtime-arg -Xmx48M ``` 此处`-Xmx48M`将堆内存上限设为48MB(可根据需求调整数值)[^4]。 3. **调整线程数限制(可选)** 若需提升编译速度,可增加并行线程数: ```properties dalvik.vm.dex2oat-threads=4 ``` 4. **重启生效** 修改后执行`adb reboot`重启设备,使配置生效。 --- ### 注意事项 - **兼容性问题**:不同Android版本参数名称可能不同(如Android 10+使用`dalvik.vm.dex2oat-filter`控制优化级别)[^3]。 - **内存占用**:过高的内存分配可能导致OOM或系统卡顿,需平衡性能与稳定性。 - **厂商限制**:部分厂商定制ROM可能屏蔽参数修改,需尝试刷入AOSP类系统。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值