Android Gradle: Что такое javaMaxHeapSize "4g"?

В проекте Android, файл build.gradle, я прошел через эту строку

dexOptions{
    javaMaxHeapSize "4g"
}

Я хотел бы знать точное назначение этого javaMaxHeapSize и что означает этот 4g. Какие еще ценности я могу дать?

3 ответа

Решение

Как упоминалось в ответе выше, это просто опция для указания максимального пула выделения памяти для виртуальной машины 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 java чтобы узнать, как установить -xmx, Вы можете прочитать справочную страницу здесь. И это говорит о том, что это флаг:

Укажите максимальный размер в байтах пула выделения памяти. Это значение должно быть кратно 1024 больше 2 МБ. Добавьте букву k или K для обозначения килобайт, или m или M для обозначения мегабайт. Значение по умолчанию выбирается во время выполнения в зависимости от конфигурации системы.

В вашем примере 4g 4 гигабайта, и это максимальный размер кучи для работы dex.

Это недокументированная опция для увеличения размера кучи для работы dex: https://groups.google.com/d/msg/adt-dev/P_TLBTyFWVY/4TPJ2YY6khUJ

Это максимальный Ram, который Gradle может использовать при создании сборки (файл apk). Это можно изменить в соответствии со структурой и размером проекта, всегда безопасно иметь разрешенный RAM "4g", однако иногда нам также нужно поднять его, как если бы мы хотели использовать minifyEnabled true или shrinkResources true флаг в градиенте для выпуска. строить

dexOptions{
    javaMaxHeapSize "4g"
}

после написания этого в build.gradle идти к gradle.propertiesи включите эту строку:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Другие вопросы по тегам