2015-11-17 41 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