Срок действия демона истекает из-за исчерпания пространства кучи JVM

94

Я только что обновил Android Studio до версии 3.5 Beta 1 и получаю

Срок действия демона истекает из-за исчерпания пространства кучи JVM

сообщение во время сборки. Кроме того, для завершения сборки требуется больше времени. Кто-нибудь знает об этом?

Ришаб Сагар
источник
2
Посмотрите, поможет ли это: stackoverflow.com/questions/47207126/…
Юрай Мартинка,
1
@JurajMartinka да, вы правы. это было исправлено после увеличения максимального размера кучи IDE . Поэтому в последней версии Android Studio 3.5 они вводят новую опцию под названием « Настройки памяти» . Все это сделано для устранения утечки памяти в Android Studio.
Ришаб Сагар

Ответы:

106

Я смог решить эту проблему для своего проекта 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
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Джордан Грант
источник
1
@MattBooth, спасибо за помощь
Dishant Chanchad
2
когда я добавил этот код, response-native-vector-icons не работал должным образом.
Амир Горжи
Большое спасибо. Голосовать за меня нельзя, чтобы выразить мою благодарность.
pokumars
89

Это можно исправить, увеличив настроенный максимальный размер кучи. для проекта.

Через IDE:

Добавьте следующие строки в файл gradle.properties. Размер памяти ниже может быть настроен в зависимости от наличия ОЗУ

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m

Через графический интерфейс:

В настройках, поиск «Настройка памяти» и увеличить IDE максимального размера кучи и Daemon максимального размера кучи в соответствии с наличием системной памяти.

Настройки памяти в Android Studio

Ришаб Сагар
источник
FWIW org.gradle.daemon по умолчанию имеет значение true, поэтому эта строка не нужна.
Смоллс,
25

Решение - увеличить память для сборки 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 in process работает, позволяя запускать несколько процессов 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

Кайлаш Униял
источник
1
Не могли бы вы объяснить, что это делает и почему помогает?
Alex
1
Положите также исходники. medium.com/google-developers/…
Ришаб Сагар
1
Привет @KailashUniyal, а что, если у меня размер кучи равен 2048 в графическом интерфейсе студии Android, и я все еще получаю «Expiring Daemon, потому что пространство кучи JVM исчерпано»?
abdi
1
@abdi Попробуйте поместить это org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8в gradle.properties. Если все еще не работает, извините, я не знаю, как это исправить.
Kailash Uniyal
1
комментирование org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8в android/gradle.propertiesсработанном лайке оберег. Благодаря!! @KailashUniyal
vikas bansal