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?



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"
    }
}

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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.