Android Gradle:什么是javaMaxHeapSize"4g"?

Kam*_*n J 41 android gradle dex

在android项目中,build.gradle文件,我已经通过这一行了

dexOptions{
    javaMaxHeapSize "4g"
}
Run Code Online (Sandbox Code Playgroud)

我想知道这个javaMaxHeapSize的确切目的以及4g意味着什么.我能给出的其他价值是什么?

Sta*_*lav 31

正如上面答案中所提到的,只是为dex操作指定Java虚拟机(JVM)的最大内存分配池.它是相同的,为java提供-xmx参数.由于它来自这里的源代码,它的setter看起来像:

if (theJavaMaxHeapSize.matches("\\d+[kKmMgGtT]?")) {
    javaMaxHeapSize = theJavaMaxHeapSize
} else {
    throw new IllegalArgumentException(
            "Invalid max heap size DexOption. See `man java` for valid -Xmx arguments.")
}
Run Code Online (Sandbox Code Playgroud)

所以,你可以看到,接受的值应该与\d+[kKmMgGtT]?模式匹配,因此不是,它甚至指的是man java要了解,如何设置-xmx.您可以在此处阅读手册页.它说,这个标志:

指定内存分配池的最大大小(以字节为单位).此值必须是1024的倍数大于2MB.附加字母k或K表示千字节,或m或M表示兆字节.根据系统配置在运行时选择默认值.

在您的示例中,4g是4 GB,这是dex操作的最大堆大小.


Sca*_*dge 8

这是一个未记录的选项,用于增加dex操作的堆大小:https://groups.google.com/d/msg/adt-dev/P_TLBTyFWVY/4TPJ2YY6khUJ