Срок действия демона истекает из-за исчерпания пространства кучи 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.