Kedaluwarsa Daemon karena ruang heap JVM habis

91

Saya baru saja memperbarui Android Studio ke 3.5 Beta 1 dan saya mendapatkan

Kedaluwarsa Daemon karena ruang heap JVM habis

pesan saat build sedang berjalan. Selain itu, pembangunan membutuhkan lebih banyak waktu untuk diselesaikan. Apakah ada yang tahu tentang ini?

Rishabh Sagar
sumber
2
Lihat di sini jika itu membantu: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@JurajMartinka ya, kamu benar. itu diperbaiki setelah meningkatkan ukuran tumpukan maks IDE . Jadi mereka memperkenalkan opsi baru yang disebut Pengaturan Memori di Android Studio 3.5 terbaru. Ini semua dilakukan untuk memperbaiki kebocoran memori di Android Studio.
Rishabh Sagar

Jawaban:

97

Saya dapat menyelesaikan ini untuk proyek React Native saya dengan mengkonfigurasi yang berikut:

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

dan

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Jordan Grant
sumber
1
@MattBooth thanx for help me
Dishant Chanchad
2
ketika saya menambahkan kode ini, react-native-vector-icons tidak berfungsi dengan benar.
Amir Gorji
86

Ini dapat diperbaiki dengan meningkatkan ukuran heap maks yang dikonfigurasi untuk proyek tersebut.

Melalui IDE:

Tambahkan baris di bawah ini ke dalam file gradle.properties. Ukuran memori di bawah ini dapat dikonfigurasi berdasarkan ketersediaan RAM

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

Melalui GUI:

Di Pengaturan, cari 'Pengaturan Memori' dan tingkatkan ukuran heap maks IDE dan ukuran heap maks Daemon sesuai ketersediaan RAM sistem.

Pengaturan Memori di Android Studio

Rishabh Sagar
sumber
FWIW org.gradle.daemon secara default bernilai true sehingga baris tersebut tidak diperlukan.
Smalls
22

Solusinya adalah dengan meningkatkan memori build Android.

Saat Anda menambahkan lebih banyak modul ke aplikasi Anda, ada permintaan luar biasa yang ditempatkan pada sistem build Android, dan setelan memori default tidak akan berfungsi. Untuk menghindari OutOfMemoryErrors selama pembuatan Android, Anda harus menghapus komentar pada setelan memori gradle alternatif yang ada di /android/gradle.properties :

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

Anda dapat menemukan gradle.properties di dalam folder android .

PS

Apa yang kami lakukan ini dan mengapa itu membantu?

Izinkan saya menjelaskan beberapa terminologi dasar untuk memahami semuanya.

Daemon : - Daemon adalah program komputer yang berjalan sebagai proses latar belakang, bukan di bawah kendali langsung pengguna interaktif.

Android Studio 2.1 mengaktifkan fitur baru: Dex In Process , yang secara dramatis dapat meningkatkan kecepatan build bersih penuh serta meningkatkan performa Instant Run.

Untuk memanfaatkan Dex In Process , Anda perlu mengubah file gradle.properties dan meningkatkan jumlah memori yang dialokasikan ke VM Daemon Gradle sebesar 1 Gb, minimal menjadi 2 Gb, menggunakan properti org.gradle.jvmargs :

Menentukan argumen JVM yang digunakan untuk proses daemon. Pengaturan ini sangat berguna untuk mengubah pengaturan memori.

org.gradle.jvmargs=-Xmx2048m

Nilai default:

-Xmx10248m -XX:MaxPermSize=256m

Alokasi memori VM Gradle Daemon default adalah 1 gigabyte - yang tidak cukup untuk mendukung dexInProcess, jadi untuk memanfaatkannya, Anda harus menyetelnya ke setidaknya 2 gigabyte.

Dex dalam proses bekerja dengan memungkinkan beberapa proses DEX berjalan dalam satu VM yang juga dibagikan dengan Gradle, itulah sebabnya Anda perlu mengalokasikan memori tambahan sebelum dapat diaktifkan - memori tersebut akan dibagikan antara Gradle dan beberapa proses DEX.

Jika Anda telah meningkatkan javaMaxHeapSize dalam file build.gradle level modul Anda melebihi default 1 gigabyte, Anda harus meningkatkan memori yang ditetapkan ke Gradle Daemon terkait.

Jika ada cukup memori yang ditetapkan, Dex dalam Proses akan diaktifkan secara default, meningkatkan kinerja build secara keseluruhan dan menghilangkan overhead untuk memulai beberapa instance VM paralel . Hasilnya adalah peningkatan yang signifikan di semua waktu build, termasuk Instant Run, incremental, dan build lengkap.

Sumber: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

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

Kailash Uniyal
sumber
1
Bisakah Anda menjelaskan apa yang dilakukannya dan mengapa ini membantu?
Alex
1
Masukkan sumbernya juga. medium.com/google-developers/…
Rishabh Sagar
1
Halo @KailashUniyal bagaimana jika saya memiliki ukuran heap pada 2048 di gui studio android dan saya masih mendapatkan 'Daemon Kedaluwarsa karena ruang tumpukan JVM habis'?
abdi
@abdi Coba tempatkan ini org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8di gradle.properties. Jika masih tidak berfungsi maka maaf saya tidak tahu bagaimana cara memperbaikinya.
Kailash Uniyal
1
un-commenting org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in android/gradle.propertiesbekerja lika pesona. Terima kasih!! @KailaNyal
vikas bansal