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

В проекте android, build.gradle, я прошел через эту строку

dexOptions{
    javaMaxHeapSize "4g"
}

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

Ответ 1

Как уже упоминалось в ответе выше, просто указать максимальный пул распределения памяти для виртуальной машины 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.

Ответ 3

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

Ответ 4

dexOptions{
    javaMaxHeapSize "4g"
}

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

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