Устаревший демон, потому что пространство кучи 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

https://rnfirebase.io/#increasing-android-build-memory

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

  1. Перейдите в Панель управления > Конфигурация.
  2. Добавьте следующий аргумент в разделе «Глобальные свойства». Вы можете установить значение памяти по вашему требованию. Вот я поставил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 ГБ соответственно, в зависимости от доступной памяти.

Другие вопросы по тегам