“Terjadi kesalahan selama inisialisasi VM; Tidak dapat memesan cukup ruang untuk tumpukan objek ”menggunakan -Xmx3G


94

Pertama-tama, saya memiliki kotak dengan 8gb ram, jadi saya ragu total memori masalahnya. Aplikasi ini berfungsi dengan baik pada mesin dengan 6 GB atau kurang.

Saya mencoba mencadangkan ruang 3GB menggunakan -Xmx3G di bawah "VM Arguments" di Jalankan Konfigurasi di Eclipse.

Setiap kali saya mencoba mencadangkan lebih dari 1500mb, saya mendapatkan kesalahan ini: “Terjadi kesalahan selama inisialisasi VM; Tidak dapat memesan cukup ruang untuk tumpukan objek ”menggunakan -Xmx3G

Apa yang terjadi disini?


2
Versi java apa yang kamu punya? Sistem operasi apa yang Anda gunakan?
Adam Rofer

Ini adalah Win7, dan saya menginstal 3 versi Java yang berbeda. Salah satunya adalah JRE 32-bit yang digunakan Eclipse.
pengguna1212731

3
Jangan lupa menandai jawaban sebagai benar.
xdhmoore

Ubah saja pengaturan di gridle.property dengan ruang sutaible Anda
Bhushan

Jawaban:


64

Mungkinkah Anda menggunakan jvm 32-bit pada mesin itu?


8
Maaf atas pertanyaan bodohnya, tapi bagaimana cara memeriksanya? Dan bagaimana saya bisa menggunakan 64-bit?
pengguna1212731

3
Sebenarnya, saya baru saja mencoba java -d64 -version di baris perintah, dan muncul dengan VM server 64-bit.
pengguna1212731

6
Rupanya Eclipse menggunakan JRE versi 32-bit yang telah saya instal sebelumnya, padahal versi 64-bit adalah yang terbaru. Saya mengubah pengaturan di Preferensi -> JRE yang diinstal untuk menyelesaikan masalah ini. Terimakasih banyak atas jawaban Anda!
pengguna1212731

3
Bagaimanapun, bukankah seharusnya 32 bit cukup untuk mengatasi 4gb?
Thomas

7
Seharusnya begitu, tapi ini menyelesaikan masalah saya. Tidak ada suara positif untuk jawaban ini karena kurangnya penjelasan. Tautan ini menjelaskan bagaimana jvm 32bit tidak dapat melebihi ruang heap maks 1gb
Steven

58

Berikut cara memperbaikinya: Buka Start->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _JAVA_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  

Ubah ini ke jalur yang sesuai .


4
Sekadar catatan untuk orang lain. Anda menambahkan variabel SYSTEM, bukan variabel USER. Saya mengalami masalah ini di Eclipse dan tidak perlu me-reboot komputer saya setelah melakukan perubahan di atas ... Saya hanya perlu me-restart Eclipse. Terima kasih!
captain_jim1

Untuk orang-orang yang penasaran, tanda -Xmx di _JAVA_OPTIONS menentukan ukuran heap JVM maksimum yang diizinkan. Hal ini mencegah JVM meminta ruang yang tidak masuk akal (terutama yang tidak dapat dialokasikan secara berdekatan untuk mesin 32-bit ...)
varun

41

Ini sebenarnya bukan masalah khusus Eclipse; ini masalah umum Java-on-Windows. Itu karena cara JVM mengalokasikan memori pada Windows; itu bersikeras untuk mengalokasikan potongan memori yang berdekatan, yang seringkali tidak dapat disediakan oleh Windows, meskipun ada cukup potongan terpisah untuk memenuhi permintaan alokasi. Ada utilitas yang akan mencoba membantu Windows "men-defrag" memorinya, yang secara teori akan membantu situasi ini; tetapi saya belum benar-benar mencobanya dengan sungguh-sungguh sehingga tidak dapat berbicara tentang keefektifannya. Satu hal yang terkadang saya dengar yang mungkin membantu adalah me-reboot Windows dan, sebelum memulai aplikasi lain, luncurkan aplikasi Java yang membutuhkan sebagian besar memori. Jika Anda beruntung, Windows belum akan memecah ruang memorinya dan Java akan mendapatkan blok berdekatan yang diminta.

Di suatu tempat di interwebs ada penjelasan dan analisis yang lebih teknis tentang masalah ini, tetapi saya tidak memiliki referensi yang berguna.

Saya menemukan ini, meskipun, yang terlihat membantu: https://stackoverflow.com/a/497757/639520


2
Dalam kasus saya, jawaban Anda tampaknya berhasil. Saya tidak me-restart windows tetapi saya mencoba menutup aplikasi lain di windows saya dan kemudian menjalankan java dan itu bisa menendang VM.
sttaq

22

Pertama, JRE dari 32 bit tidak dapat menggunakan lebih banyak ~ 1,5 Gb ram. Jadi jika Anda ingin lebih, gunakan JRE 64bits.

Kedua, Ketika JVM baru dimulai, jumlahkan properti -Xmx dari semua JVM yang sedang berjalan, dan periksa apakah ada cukup memori yang tersisa di sistem untuk berjalan di -Xmx mereka sendiri, jika tidak cukup maka kesalahan terjadi.


15

Saya menggunakan Liferay dengan server Tomcat dari eclipse IDE. Saya terjebak dengan kesalahan yang sama ini saat mengklik pada server start up. Klik dua kali pada server dari eclipse. itu membuka halaman Ikhtisar Server. Argumen memori yang diperbarui dari -Xmx1024m -XX: MaxPermSize = 256m hingga -Xmx512m -XX: MaxPermSize = 256m. Kemudian itu berhasil untuk saya.



9

Pastikan Eclipse benar-benar menjalankan JVM yang sama dengan yang Anda pikirkan. Jika Anda pernah menggunakan java di browser web Anda, kemungkinan besar Anda memiliki versi 32-bit yang beredar juga yang mungkin lebih diutamakan jika diinstal atau diperbarui belakangan ini.

Untuk benar-benar yakin, saya sarankan menambahkan dua baris ini ke eclipse.inifile Anda di bagian atas:

-vm 
C:/Java/jdk1.6.0_27/bin

... di mana di komputer saya C:/Java/jdk1.6.0_27/bintempat JVM yang saya tahu adalah 64-bit berada. Pastikan binfoldernya ada di sana.

(Sebagai bonus, di Windows 7, ini juga memungkinkan Anda untuk benar-benar "menyematkan tab", itulah sebabnya saya harus melakukan ini untuk penggunaan saya sendiri)


Argumen -vm harus mengarah ke Java yang dapat dieksekusi, bukan hanya folder. Lihat wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
Salah. Lihat bug Eclipse ini: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam

Ini memang masalahnya! Eclipse menggunakan versi 32-bit JRE yang telah saya instal di beberapa titik. Terima kasih banyak atas jawabannya dan membimbing saya ke arah yang benar! Saya sangat menghargai nya.
pengguna1212731

@AdamRofer, bug itu menarik, tetapi secara khusus tentang Windows 7 dan untuk mengatasi masalah dengan menyematkan Eclipse ke bilah tugas. Secara umum, eclipse.ini harus mengarah ke java yang dapat dieksekusi, meskipun peluncur Equinox tampaknya cerdas karena akan mencari java yang dapat dieksekusi jika -vm menunjuk ke folder (pada Windows, setidaknya).
E-Riz

@ E-Riz "harus" terlalu ketat untuk selera saya :) Semoga mereka menyelesaikan bug tanpa harus mengubah argumen vm kapan-kapan. Berikut informasi lebih lanjut yang sebaiknya mereka perbarui di eclipse.inihalaman mereka : wiki.eclipse.org/…
Adam

5

Ini adalah masalah ukuran Heap. Edit .bat(file Batch) Anda. Ini mungkin menunjukkan ukuran Heap 1024. Ubah ke 512 Maka itu akan bekerja.


2

Saya juga mengalami masalah yang sama saat menggunakan Eclipse yaitu 32 bit dan JVM yang digunakan adalah 64 bit. Ketika saya merutekan Eclipse ke 32 bit JVM maka itu berhasil


2

Letakkan saja #simbol di depan org.gradle.jvmargs=-Xmx1536mdalam gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

Tidak yakin bagaimana cara kerjanya saat mencoba Kotlin-multiplatform di mac os! lagian, terima kasih!
Chintan Soni

1

Saya tahu bahwa saya agak terlambat, tetapi inilah jawaban saya:

Saya baru saja menginstal Versi online Java dari Oracle (bukan versi 64-Bit offline).

Setelah menambahkan variabel JAVA_HOME ENV, itu berhasil!

Semoga saya bisa membantu :)


0

Mungkin Anda mencoba opsi yang salah. Saya mendapat kesalahan serupa dengan mendukung log kesalahan:

Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

Saya kasus saya, perangkat lunak belum mendukung java 8 (skrip menggunakan argumen JVM lama) tetapi saya memiliki java 8 secara default.


0

Salah satu alasan untuk masalah ini adalah tidak ada memori yang tersedia untuk memulai Tomcat. Cobalah untuk menghapus perangkat lunak yang berjalan tidak diinginkan dari windows dan restart gerhana dan kucing jantan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.