2015-11-17 93 views
27

在Android项目,的build.gradle文件,我已经通过这条线Android Gradle:什么是javaMaxHeapSize“4g”?

dexOptions{ 
    javaMaxHeapSize "4g" 
} 

我想知道这确切目的javaMaxHeapSize,什么是4克手段。我可以给予什么其他的价值?

+1

这是我没有看到的问题。我最近将我的4G从4g改为8g,以防未来我的游戏应用没有明显的不良影响。 – Androidcoder

回答

26

因为它在answer above提到的,它只是用来指定Java虚拟机的最大内存分配池(JVM)的选项为了dex操作。这是一样的,以提供给java的-xmx参数。由于它是从here的源代码,它的制定者的样子:

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 java结识,如何设置-xmx。你可以阅读the man page here。它说,这个标志:

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

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

-3
dexOptions{ 
    javaMaxHeapSize "4g" 
} 

build.gradle写这之后去gradle.properties并启用此行:“?是否有任何缺点设置这个数字真正的高”

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

Xmx应至少设置为javaMaxHeapSize。在你的例子中,它是一半的大小。 – OldSchool4664

+0

@ OldSchool4664他是对的。它应该超过4096米。 – kimkevin