Android Gradle:什么是javaMaxHeapSize“4g”?

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

dexOptions{ javaMaxHeapSize "4g" } 

我想知道这个javaMaxHeapSize的确切目的,那4g是什么意思。 我可以给予什么其他的价值?

Solutions Collecting From Web of "Android Gradle:什么是javaMaxHeapSize“4g”?"

正如在上面的答案中所提到的那样,它只是为Java虚拟机(JVM)指定dex操作的最大内存分配池的一个选项。 和java提供-xmx参数一样。 由于它来自这里的源代码,它的设置看起来像:

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

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

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

在你的例子中, 4g是4千兆字节,这是dex操作的最大堆大小。

这是一个未公开的选项来增加dex操作的堆大小: https : //groups.google.com/d/msg/adt-dev/P_TLBTyFWVY/4TPJ2YY6khUJ

 dexOptions{ javaMaxHeapSize "4g" } 

build.gradle写入之后,转到gradle.properties并启用此行:

 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8