Saya mendapatkan pesan ini selama membangun proyek saya
java.lang.OutOfMemoryError: ruang heap Java
Bagaimana cara menambah ruang heap, saya punya 8Gb atau RAM, tidak mungkin maven menghabiskan banyak, saya menemukan http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux / bagaimana melakukannya di linux, tapi saya menggunakan windows 7. Bagaimana cara mengubah java heap space di bawah windows?
Jawaban:
Variabel lingkungan yang akan disetel
MAVEN_OPTS
, misalnyaMAVEN_OPTS=-Xmx1024m
. Themaxmem
konfigurasi di pom hanya berlaku ketika Anda mengatur plugin compiler untuk garpujavac
ke dalam JVM baru. Jika tidak, plugin berjalan di dalam VM yang sama dengan Maven dan dengan demikian di dalam memori yang diteruskan pada baris perintah melaluiMAVEN_OPTS
.Untuk menyetel MAVEN_OPTS di bawah Windows 7:
-Xmx1024m
(atau lebih)Buka jendela perintah baru dan jalankan
mvn
.sumber
Jika Anda kehabisan ruang heap selama pengujian JUnit yang pasti (atau gagal), mengubah MAVEN_OPTS mungkin tidak membantu Anda. Saya terus mencoba konfigurasi yang berbeda di MAVEN_OPTS tanpa hasil sampai saya menemukan posting ini yang memperbaiki masalah.
Pada dasarnya JUnits bercabang ke lingkungan mereka sendiri dan mengabaikan pengaturan di MAVEN_OPTS. Anda perlu mengkonfigurasi jitu di pom Anda untuk menambahkan lebih banyak memori untuk JUnits.
Semoga ini bisa menghemat waktu orang lain!
Sunting: Menyalin solusi dari blog Keith Chapman untuk berjaga-jaga jika suatu saat tautan rusak:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkMode>pertest</forkMode> <argLine>-Xms256m -Xmx512m</argLine> <testFailureIgnore>false</testFailureIgnore> <skip>false</skip> <includes> <include>**/*IntegrationTestSuite.java</include> </includes> </configuration> </plugin>
Pembaruan (5/31/2017): Terima kasih kepada @johnstosh karena telah menunjukkan hal ini - pasti telah sedikit berkembang sejak saya meletakkan jawaban ini di luar sana. Berikut ini tautan ke dokumentasi mereka dan contoh kode yang diperbarui (baris arg masih merupakan bagian penting untuk pertanyaan ini):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <forkCount>3</forkCount> <reuseForks>true</reuseForks> <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> <systemPropertyVariables> <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema> </systemPropertyVariables> <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory> </configuration> </plugin>
sumber
Ini harus menjadi perintah yang sama, kecuali SET, bukan EKSPOR
sumber
C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Di Mac: Alih-alih
JAVA_OPTS
danMAVEN_OPTS
, gunakan _JAVA_OPTIONS sebagai gantinya. Ini bekerja!sumber
Setelah mencoba menggunakan variabel MAVEN_OPTS tanpa hasil, saya menemukan situs ini yang berhasil untuk saya. Jadi yang harus saya lakukan adalah menambahkan -Xms128m -Xmx1024m ke opsi VM default dan itu berhasil.
Untuk mengubahnya di Eclipse, buka Window -> Preferences -> Java -> Installed JRE. Pilih JRE / JDK yang telah dicentang dan klik edit.
sumber
Di windows:
Tambahkan variabel lingkungan (di kedua variabel sistem dan pengguna, saya punya masalah aneh, yang mendapat var dari berbagai tempat, jadi saya menambahkannya di keduanya).
Beri nama MAVEN_OPTS.
Nilainya akan menjadi:
-Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled
Jumlahnya bisa berbeda, buatlah sesuai dengan ukuran anggota Anda.
Saya punya masalah itu dan ini memperbaikinya, tidak ada yang lain!
sumber
Berhasil - Untuk mengubah di Eclipse, buka Window -> Preferensi -> Java -> JRE Terpasang. Pilih JRE / JDK yang telah dicentang dan klik edit.
Argumen VM Default = -Xms128m -Xmx1024m
sumber
Anda mencari 2 opsi untuk
java
:Tempatkan mereka dalam permintaan baris perintah Anda dari yang
java
dapat dieksekusi, seperti ini:Perlu diingat bahwa Anda mungkin ingin ukuran awal dan maksimum heap sama, bergantung pada aplikasinya, karena ini menghindari pengubahan ukuran heap selama runtime (yang dapat memakan waktu dalam aplikasi yang perlu responsif). Mengubah ukuran tumpukan dapat memerlukan banyak pemindahan objek dan mengulangi pembukuan.
Untuk proyek sehari-hari, buatlah apa pun yang menurut Anda cukup baik. Profil untuk bantuan.
sumber