Устаревший демон, потому что пространство кучи JVM исчерпано
Я только что обновил Android Studio до 3.5 Beta 1 и получаю
Устаревший демон, потому что пространство кучи JVM исчерпано
сообщение во время сборки. Кроме того, сборка занимает больше времени для завершения. У кого-нибудь есть идеи по этому поводу?
11 ответов
Тем, кто сталкивается с этой проблемой, следует увеличить максимальный размер кучи IDE в настройках памяти в соответствии с доступностью ОЗУ.
Я смог решить эту проблему для своего проекта React Native, настроив следующее:
// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
а также
// app/build.gradle
dexOptions {
javaMaxHeapSize "3g"
}
Решение - увеличить память для сборки Android.
По мере того как вы добавляете дополнительные модули в свое приложение, система сборки Android становится все более требовательной, и настройки памяти по умолчанию работать не будут. Чтобы избежать OutOfMemoryErrors во время сборки Android, вам следует раскомментировать альтернативную настройку памяти gradle, присутствующую в /android/gradle.properties:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Вы можете найти gradle.properties внутри папки Android.
PS
Что мы этим делаем и почему это помогает?
Позвольте мне прояснить базовую терминологию для понимания всего этого.
Демон: - Демон - это компьютерная программа, которая работает как фоновый процесс, а не находится под прямым управлением интерактивного пользователя.
Android Studio 2.1 включает новую функцию: Dex In Process, которая может значительно увеличить скорость полных чистых сборок, а также повысить производительность Instant Run.
Чтобы воспользоваться преимуществами Dex In Process, вам необходимо изменить файл gradle.properties и увеличить объем памяти, выделенной для виртуальной машины Gradle Daemon, на 1 ГБ, минимум до 2 ГБ, используя свойство org.gradle.jvmargs.:
Задает аргументы JVM, используемые для процесса демона. Этот параметр особенно полезен для настройки параметров памяти.
org.gradle.jvmargs=-Xmx2048m
Значение по умолчанию:
-Xmx10248m -XX:MaxPermSize=256m
По умолчанию выделение памяти Gradle Daemon VM составляет 1 гигабайт - этого недостаточно для поддержки dexInProcess, поэтому, чтобы воспользоваться этим преимуществом, вам необходимо установить его как минимум на 2 гигабайта.
Dex в процессе работает, позволяя запускать несколько процессов DEX в одной виртуальной машине, которая также используется совместно с Gradle, поэтому вам необходимо выделить дополнительную память, прежде чем ее можно будет включить - эта память будет совместно использоваться Gradle и несколькими процессами DEX.
Если вы увеличили javaMaxHeapSize в файле build.gradle на уровне модуля сверх значения по умолчанию в 1 гигабайт, вам потребуется соответственно увеличить память, назначенную Gradle Daemon.
Когда выделено достаточно памяти, Dex in Process включен по умолчанию, что улучшает общую производительность сборки и устраняет накладные расходы, связанные с запуском нескольких параллельных экземпляров виртуальных машин. В результате значительно улучшается время сборки, включая мгновенный запуск, инкрементную и полную сборку.
Источник: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e
По мере того, как вы добавляете дополнительные модули в свое приложение, система сборки Android становится все более требовательной, и настройки памяти по умолчанию работать не будут. Чтобы избежать OutOfMemoryErrors во время сборки Android, вам следует раскомментировать альтернативную настройку памяти gradle, присутствующую в /android/gradle.properties:
Сбалансируйте потребление памяти и скорость сборки, используя параметры gradle. Для образца
Android Studio 2022.1.1 (16 ГБ ОЗУ ПК)
Gradle v7.3.3 (./gradle/wrapper/gradle-wrapper.properties)
AGP v7.2.0 (./build.gradle)
com.android.tools.build:gradle:7.2.0
Плагин исправления кэша Gradle
org.gradle.android.cache-fix:org.gradle.android.cache-fix.gradle.plugin:2.5.3
Эта версия зависимостей Служб Google поддерживает кэш конфигурации Gradle.
com.google.gms:google-services:4.3.5
./gradle.properties
android.enableJetifier=true
android.jetifier.ignorelist=bcprov-jdk15on
android.useAndroidX=true
kapt.incremental.apt=true
kapt.use.worker.api=true
kotlin.daemon.jvm.options=-Xms1g -Xmx4g
manifestmerger.enabled=true
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.daemon=true
org.gradle.jvmargs=-XX:InitialHeapSize=1g -XX:MaxHeapSize=6g -XX:MaxPermSize=2g -XX:MaxMetaspaceSize=2g -XX:NewSize=1g -XX:MaxNewSize=2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache-problems=warn
Полезные ссылки:
https://proandroiddev.com/how-we-reduced-our-gradle-build-times-by-over-80-51f2b6d6b05b
https://developer.android.com/studio/build/profile-your-build#using-the-gradle---profile-option
Просто раскомментируйте выделенную строку.
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
В основном это происходит из-за того, что памяти, необходимой для создания приложения, недостаточно для Gradle Daemon... Я обнаружил, что, раскомментировав строку
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
на gradle.properties (обычно находится в строке 13) работает для меня с compileSdkVersion как 30 и targetSdkVersion также как 30 в вашем файле android / build.gradle
В моем случае, вероятно, это была какая-то ошибка Gradle. На самом деле у нас не было проблем с памятью, но сообщение продолжало появляться. Мое решение было:
gradlew --no-daemon
Если вы столкнулись с этой ошибкой в Jenkins, я решил проблему именно так.
- Перейдите в Панель управления > Конфигурация.
- Добавьте следующий аргумент в разделе «Глобальные свойства». Вы можете установить значение памяти по вашему требованию. Вот я поставил
2048m
.
Имя:
GRADLE_OPTS
Ценить:
-Dorg.gradle.daemon=true -Dorg.gradle.jvmargs=-Xmx2048M
Я нашел процесс демона под названиемorg.gradle.launcher.daemon.bootstrap.GradleDaemon someVersion
после завершения этого процесса и нажмитеReload all gradle project
, он будет успешно построен
Добавьте эту строку вgradle.properties
файл, найденный в корневом каталоге проекта:
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
Вы можете рассмотреть возможность увеличения этого распределения, если в вашей системе больше доступной оперативной памяти. Например, вы можете попробовать-Xmx3072m
или-Xmx4096m
за 3 ГБ или 4 ГБ соответственно, в зависимости от доступной памяти.