Демон закінчується, оскільки простір купи JVM вичерпано


91

Я щойно оновив Android Studio до версії 3.5 Beta 1 і отримую

Демон закінчується, оскільки простір купи JVM вичерпано

повідомлення під час запуску збірки. Крім того, побудова займає більше часу для завершення. Хтось має якусь ідею щодо цього?


2
Подивіться тут, чи це допомагає: stackoverflow.com/questions/47207126/…
Юрай

1
@JurajMartinka так, ти маєш рацію. це було виправлено після збільшення максимального розміру купи IDE . Тож вони впроваджують нову опцію під назвою « Налаштування пам’яті» в останній версії Android Studio 3.5. Це все зроблено для усунення витоку пам'яті в Android Studio.
Rishabh Sagar

Відповіді:


97

Я зміг вирішити це для свого проекту 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 не працював належним чином.
Амір

86

Це можна виправити, збільшивши налаштований максимальний розмір купи для проекту.

Через IDE:

Додайте наведені нижче рядки у файл gradle.properties. Нижчий обсяг пам'яті можна налаштувати на основі доступності оперативної пам'яті

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

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

В налаштуваннях, пошук «Налаштування пам'яті» і збільшити IDE максимального розміру купи і Daemon максимального розміру купи відповідно з наявністю системної пам'яті.

Налаштування пам'яті в Android Studio


FWIW org.gradle.daemon за замовчуванням має значення true, тому цей рядок не потрібен.
Smalls

22

Рішення полягає в збільшенні пам’яті для збірки 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 , яка може різко збільшити швидкість повної чистої збірки, а також покращити продуктивність миттєвого запуску.

Щоб скористатися перевагами Dex In Process , вам потрібно змінити файл gradle.properties і збільшити обсяг пам'яті, виділеної Gradle Daemon VM, на 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.

Коли достатньо пам'яті, призначеної Dex у процесі, увімкнено за замовчуванням, покращуючи загальну продуктивність збірки та видаляючи накладні витрати на запуск декількох паралельних екземплярів ВМ . Результатом є значне поліпшення всіх часів збірки, включаючи миттєвий запуск, поступові та повні збірки.

Джерело: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

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


1
Не могли б ви пояснити, що це робить і чому це допомагає?
Олексій

1
Помістіть також джерела. medium.com/google-developers/…
Сагар,

1
Привіт, @KailashUniyal, що якщо у мене розмір купи у 2048 році в графічному інтерфейсі андроїд-студії, і я все ще отримую повідомлення `` Термін дії, що закінчується, тому що простір купи JVM вичерпаний ''?
абді

@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спрацьованому lika шарм. Дякую!! @KailashUniyal
vikas bansal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.