Traci ważność demona, ponieważ miejsce na sterty maszyny JVM jest wyczerpane

91

Właśnie zaktualizowałem Android Studio do wersji 3.5 Beta 1 i otrzymuję

Traci ważność demona, ponieważ miejsce na sterty maszyny JVM jest wyczerpane

komunikat podczas działania kompilacji. Ponadto kompilacja zajmuje więcej czasu. Czy ktoś ma jakiś pomysł w tej sprawie?

Rishabh Sagar
źródło
2
Zobacz tutaj, czy to pomoże: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@JurajMartinka tak, masz rację. został naprawiony po zwiększeniu maksymalnego rozmiaru sterty IDE . Dlatego wprowadzają nową opcję o nazwie Ustawienia pamięci w najnowszym Android Studio 3.5. Wszystko to ma na celu naprawienie wycieku pamięci w Android Studio.
Rishabh Sagar

Odpowiedzi:

97

Udało mi się rozwiązać ten problem dla mojego projektu React Native , konfigurując następujące elementy:

// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

i

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Jordan Grant
źródło
1
@MattBooth dzięki za pomoc
Dishant Chanchad
2
kiedy dodałem ten kod, ikony reakcji-natywnych wektorów nie działały poprawnie.
Amir Gorji
86

Można to naprawić, zwiększając skonfigurowany maksymalny rozmiar sterty dla projektu.

Poprzez IDE:

Dodaj poniższe wiersze do pliku gradle.properties. Poniżej rozmiaru pamięci można skonfigurować w oparciu o dostępność pamięci RAM

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

Poprzez GUI:

W ustawieniach wyszukiwania dla „Ustawienia pamięci” i zwiększyć IDE maksymalną wielkość sterty i Daemon maksymalną wielkość sterty jak na dostępność systemu RAM.

Ustawienia pamięci w Android Studio

Rishabh Sagar
źródło
FWIW org.gradle.daemon domyślnie przyjmuje wartość true, więc ta linia nie jest potrzebna.
Smalls
22

Rozwiązaniem jest zwiększenie pamięci kompilacji Androida.

Gdy dodajesz więcej modułów do swojej aplikacji, istnieje niewiarygodne zapotrzebowanie na system kompilacji Androida, a domyślne ustawienia pamięci nie będą działać. Aby uniknąć błędów OutOfMemoryErrors podczas kompilacji Androida, należy odkomentować alternatywne ustawienie pamięci gradle obecne w /android/gradle.properties :

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Możesz znaleźć gradle.properties w folderze Androida .

PS

Co to robimy i dlaczego to pomaga?

Pozwólcie, że wyjaśnię podstawową terminologię, aby zrozumieć całość.

Demon : - Demon to program komputerowy, który działa jako proces w tle, zamiast być pod bezpośrednią kontrolą interaktywnego użytkownika.

Android Studio 2.1 udostępnia nową funkcję: Dex In Process , która może radykalnie zwiększyć prędkość całkowicie czystych kompilacji, a także poprawić wydajność Instant Run.

Aby skorzystać z Dex In Process , musisz zmodyfikować plik gradle.properties i zwiększyć ilość pamięci przydzielonej do maszyny wirtualnej Gradle Daemon o 1 GB, do co najmniej 2 GB, za pomocą właściwości org.gradle.jvmargs :

Określa argumenty maszyny JVM używane w procesie demona. To ustawienie jest szczególnie przydatne przy dostosowywaniu ustawień pamięci.

org.gradle.jvmargs=-Xmx2048m

Domyślna wartość:

-Xmx10248m -XX:MaxPermSize=256m

Domyślna alokacja pamięci maszyny wirtualnej Gradle Daemon to 1 gigabajt - co jest niewystarczające do obsługi dexInProcess, więc aby skorzystać, musisz ustawić ją na co najmniej 2 gigabajty.

Dex in process działa, umożliwiając uruchamianie wielu procesów DEX w ramach jednej maszyny wirtualnej, która jest również współdzielona z Gradle, dlatego przed włączeniem należy przydzielić dodatkową pamięć - ta pamięć będzie współdzielona między Gradle i wieloma procesami DEX.

Jeśli zwiększyłeś javaMaxHeapSize w pliku build.gradle na poziomie modułu powyżej domyślnego 1 gigabajta, będziesz musiał odpowiednio zwiększyć pamięć przypisaną do demona Gradle.

Gdy jest wystarczająco dużo pamięci przypisanej Dex in Process, jest domyślnie włączone, co poprawia ogólną wydajność kompilacji i usuwa obciążenie związane z uruchamianiem wielu równoległych wystąpień maszyn wirtualnych . Rezultatem jest znaczna poprawa wszystkich czasów kompilacji, w tym kompilacji natychmiastowych, przyrostowych i pełnych.

Źródło: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

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

Kailash Uniyal
źródło
1
Czy mógłbyś wyjaśnić, co to robi i dlaczego pomaga?
Alex
1
Umieść również źródła. medium.com/google-developers/…
Rishabh Sagar
1
Witaj, @KailashUniyal, co jeśli mam rozmiar sterty na poziomie 2048 w interfejsie użytkownika studia Android i nadal otrzymuję komunikat „Wygasający demon, ponieważ miejsce na stertę JVM jest wyczerpane”?
abdi
@abdi Spróbuj umieścić to org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8w gradle.properties. Jeśli nadal nie działa, przepraszam, nie mam pojęcia, jak to naprawić.
Kailash Uniyal
1
Brak komentarzy org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8w android/gradle.propertiespracującej lice to urok. Dzięki!! @KailashUniyal
vikas