Tidak dapat memesan ruang yang cukup untuk tumpukan objek

277

Saya mendapatkan pengecualian berikut berulang kali setiap kali saya mencoba menjalankan program.

Kesalahan terjadi selama inisialisasi VM

Tidak dapat memesan ruang yang cukup untuk tumpukan objek

Tidak dapat membuat mesin virtual java.

Saya mencoba meningkatkan memori virtual (ukuran halaman) dan ukuran RAM, tetapi tidak berhasil.

Bagaimana saya bisa menghilangkan kesalahan ini?

Narendra
sumber
2
Saya juga mendapatkan kesalahan ini ketika menggunakan jdk / jre 1.6 di mesin virtual saya, mencoba mengubah nilai konfigurasi yang diberikan dalam komentar tetapi ini tidak membantu, setelah memperbarui ke jdk 1.7 kesalahan hilang dan lebih besar parameter Xmx diterapkan. Tampaknya ada banyak perubahan dengan penggunaan tumpukan sejak java 1.6.
Alexander.Iljushkin

Jawaban:

214

Jalankan JVM dengan -XX:MaxHeapSize=512m(atau jumlah besar yang Anda butuhkan) (atau -Xmx512msingkatnya)

Bozho
sumber
42
Atau yang lebih pendek, -mx256m atau -mx512m;)
Peter Lawrey
8
Apakah -mx sama dengan -Xmx dan -XX: MaxHeapSize?
Erty Seidohl
19
Terima kasih .. ternyata angka yang terlalu besar juga bisa menjadi masalah dan bisa memberikan kesalahan yang sama!
Dinesh Rajan
17
Adakah yang menemukan solusi yang benar-benar berfungsi 100% dari waktu? Solusi ini memecahkan masalah sementara tetapi kemudian tiba-tiba kembali. Saya mendapat ram 16GB dan saya bosan dengan sh * t ini. Semuanya lebih baik di masa lalu: [
Nilzor
6
Tidak berfungsi untuk saya di Windows 8 dengan x86 atau x64 Java.
AndrewSmiley
128

Ini juga dapat disebabkan oleh pengaturan sesuatu yang terlalu besar pada 32-bit HotSpot vm, misalnya:

-Xms1536m -Xmx1536m

di mana ini mungkin / akan berhasil:

-Xms1336m -Xmx1336m
Djangofan
sumber
5
Saya lupa menyebutkan bahwa masalah ini harus terjadi saat meluncurkan di shell perintah 32-bit. Shell perintah 64-bit mungkin tidak memiliki masalah ini.
djangofan
Bagi saya ini gagal dengan nilai default dan dengan nilai terlalu besar jadi pastikan Anda mencoba beberapa nilai. Terima kasih atas jawabannya!
Trax
47

ini dia cara memperbaikinya:

  • Pergi ke Start-> Control Panel-> System-> Advanced (tab) -> Variabel Lingkungan-> Sistem

    Variabel-> Baru: Nama _JAVA_OPTIONS variabel: Nilai -Xmx512M variabel: Nama Path
    variabel: Nilai variabel:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Ubah ini ke jalur yang sesuai Anda.

Mohamed Adel
sumber
1
Cukup mirip dengan jawaban ini , saya akan mengatakan ...
That1Guy
Bagus Bersamaan dengan yang disebutkan di atas, yang ini juga. stackoverflow.com/a/9350506/967638
Amarnath
46

Saya mengalami ini ketika menggunakan javac, dan sepertinya tidak mengambil opsi baris perintah,

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

jadi solusinya di sini begitu atur _JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M

Dan ini mengkompilasi dengan baik.

Ini terjadi pada saya pada mesin dengan banyak RAM, tetapi dengan memori yang lebih rendah. Java memutuskan untuk mengalokasikan tumpukan besar karena mendeteksi ram di mesin, tetapi tidak diizinkan mengalokasikannya karena ulimit.

Jens Timmerman
sumber
1
+1 untuk menunjukkan _JAVA_OPTIONS - dalam kasus saya java dipanggil dari suatu tempat jauh di dalam skrip shell yang saya tidak memiliki akses tulis, jadi opsi ini lebih disukai.
gerrit
Sama disini. Saya menggunakan komputer universitas jadi saya bukan admin (tidak dapat mengubah variabel lingkungan) dan opsi baris perintah tidak berfungsi sama sekali. Terima kasih banyak!
Kimbluey
38

Java 32-bit membutuhkan ruang kosong yang berdekatan dalam memori untuk dijalankan. Jika Anda menentukan ukuran tumpukan besar, mungkin tidak ada begitu banyak ruang kosong yang berdekatan di memori bahkan jika Anda memiliki lebih banyak ruang kosong yang tersedia daripada yang diperlukan.

Menginstal versi 64-bit Java membantu dalam kasus ini, persyaratan memori yang berdekatan hanya berlaku untuk Java 32-bit.

JohnEye
sumber
1
Saya pikir ini adalah jawaban terbaik jika Anda terus mendapatkan kesalahan setelah menggunakan opsi -Xmx [bignumber] m. Membantu saya menjalankan Apache jMeter dengan benar.
RuudvK
Saya membuat proyek baru, tanpa kode selain dari kegiatan utama yang dihasilkan secara otomatis, dan menghasilkan kesalahan ini
behelit
1
Saya kedua @RuudvK. Memasang 64-bit memungkinkan saya untuk meningkatkan memori maks sambil menghapus kesalahan alokasi memori. Ini harus menjadi jawaban yang diterima.
J Weezy
28

Dikombinasikan dengan -Xmx512M gunakan -d64 untuk memastikan Anda menjalankan VM 64-bit. Pada mesin 64-bit saya berpikir pasti saya menjalankan mesin virtual 64-bit, tetapi tidak. Setelah menginstal Java 64-bit, opsi -d64 bekerja dan -Xmx memungkinkan ukuran memori yang jauh lebih besar.

java -d64 -Xmx512M mypackage.Test
Axl
sumber
4
Jawaban ini harus di atas. Menghabiskan dua bulan memerangi masalah ini, hanya untuk menyadari bahwa menginstal 64 bit Java memecahkan masalah (opsi -d64 tidak diperlukan dalam kasus saya)
Nilzor
Mengambil _JAVA_OPTIONS: -d64 -Xmx1024M Opsi tidak dikenal: -d64 JVM tidak dapat dimulai. Ukuran heap maksimum (-Xmx) mungkin terlalu besar atau alat antivirus atau firewall dapat memblokir eksekusi.
Alexander
14

Saya mendapatkan kesalahan yang sama dan menyelesaikannya dengan mengonfigurasinya di run.conf.bat

Jalankan JVM dengan mengkonfigurasi run.conf.bat di Jboss5x

Jika memori bebas tidak tersedia SEBAGAI Anda menyampaikan dalam pernyataan maka silakan membuat perubahan di run.conf.bat

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"
Ankam shyamsundar
sumber
7

Saya tahu sudah ada banyak jawaban di sini, tetapi tidak ada yang membantu saya. Pada akhirnya saya membuka file /etc/elasticsearch/jvm.optionsdan mengubah:

-Xms2G
-Xmx2G

untuk

-Xms256M
-Xmx256M

Itu menyelesaikannya untuk saya. Semoga ini bisa membantu orang lain di sini.

kramer65
sumber
7

Saya memiliki masalah serupa. Saya telah menginstal versi 32 bit Java pada mesin 64 bit.

Dengan menghapus instalan versi itu dan menginstal Java versi 64 bit. Saya bisa menyelesaikan masalah ini.

Manu Sharma
sumber
6

Misalkan kelas Anda disebut Testdalam paket mypackage. Jalankan kode Anda seperti ini:

java -Xmx1024m mypackage.Test

Ini akan memesan 1024 MB ruang tumpukan untuk kode Anda. Jika Anda ingin 512 MB, Anda dapat menggunakan:

java -Xmx512m mypackage.Test

Gunakan sedikit m 1024m, 512m, dll

euphoria83
sumber
6

Terkadang, kesalahan ini menunjukkan bahwa memori fisik dan swap di server benar-benar dimanfaatkan sepenuhnya!

Saya melihat masalah ini baru-baru ini di server yang menjalankan RedHat Enterprise Linux 5.7 dengan 48 GB RAM. Saya menemukan itu bahkan hanya berjalan

java -version

menyebabkan kesalahan yang sama, yang menyatakan bahwa masalahnya tidak spesifik untuk aplikasi saya.

Lari

cat /proc/meminfo

melaporkan bahwa MemFree dan SwapFree masing-masing jauh di bawah 1% dari nilai MemTotal dan SwapTotal, masing-masing:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

Menghentikan beberapa aplikasi lain yang sedang berjalan di mesin membawa angka memori bebas naik sedikit:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

Pada titik ini, sebuah instance baru Java akan mulai dengan baik, dan saya dapat menjalankan aplikasi saya.

(Jelas, bagi saya, ini hanya solusi sementara; Saya masih memiliki tugas luar biasa untuk melakukan pemeriksaan yang lebih menyeluruh dari proses yang berjalan pada mesin itu untuk melihat apakah ada sesuatu yang dapat dilakukan untuk mengurangi tingkat pemanfaatan memori nominal, tanpa harus resor untuk menghentikan aplikasi.)

Jon Schneider
sumber
Sama di sini, java -versiongagal, meskipun atas masih menunjukkan beberapa gratis: | (juga mengatakan Kesalahan terjadi selama inisialisasi VM Tidak dapat memesan ruang yang cukup untuk array penandaan kartu kadang-kadang). Memperbaiki tampaknya untuk menjalankan atas, mencari proses mana yang menggunakan RAM paling banyak (kolom VIRT), bunuh mereka [postgres, appdynamics for me]: |
rogerdpack
Mungkinkah ini disebabkan oleh fragmentasi memori? Balasan di atas menyebutkan ruang kosong yang berdekatan.
Rick Moritz
6

Kesalahan:

Untuk kesalahan, "kesalahan terjadi selama inisialisasi vm tidak dapat memesan ruang yang cukup untuk objek heap jboss"

Penyebab utama :

  • Alokasi memori yang tidak tepat / tidak cukup untuk JVM kami seperti yang disebutkan di bawah ini.

  • mis. JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" di jboss-eap-6.2 \ bin \ standalone.conf atau "JAVA_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256M -jboss \ jboss di jboss \ standalone.conf.bat yang tidak lain adalah parameter kumpulan alokasi memori JVM.

Resolusi:

  • Tambah ukuran tumpukan. Untuk menambah ukuran tumpukan,
  • goto -> jboss-eap-6.2 \ bin \ standalone.conf.bat atau jboss-eap-6.2 \ bin \ standalone.conf
  • ubah -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m" di mana -Xms adalah ukuran tumpukan Minimum dan -Xmx adalah ukuran tumpukan maksimum.
  • Biasanya tidak direkomendasikan untuk memiliki ukuran yang sama untuk min dan maks.

  • Jika Anda menjalankan aplikasi dari gerhana,

  • Klik dua kali pada server
  • pilih 'buka peluncuran konfigurasi' Anda akan diarahkan ke jendela 'Edit properti konfigurasi peluncuran'.
  • Di windown ini, buka tab '(x) = Argumen'.
  • Dalam Argumen VM, tentukan ukuran tumpukan Anda seperti yang disebutkan di bawah ini
  • "-Dprogram.name = JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true
Prabhakar
sumber
Kutipan dari Referensi Oracle Command Line : " Untuk kinerja terbaik, atur -Xms ke ukuran yang sama dengan ukuran heap maksimum, misalnya:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038
3

Saya baru-baru ini menghadapi masalah ini. Saya memiliki 3 aplikasi java yang dimulai dengan ukuran heap 1024m atau 1280m. Java sedang melihat ruang yang tersedia dalam swap, dan jika tidak ada cukup memori yang tersedia, jvm keluar.

Untuk mengatasi masalah ini, saya harus mengakhiri beberapa program yang memiliki sejumlah besar memori virtual yang dialokasikan.

Saya menjalankan di x86-64 linux dengan jvm 64-bit.

codeDr
sumber
3

Saya memiliki jumlah pengaturan memori yang tepat tetapi bagi saya itu menggunakan intellij 64bit dengan 32 bit jvm. Setelah saya beralih ke VM 64 bit, kesalahan itu hilang.

vsingh
sumber
2

Dengan asumsi Anda memiliki cukup memori bebas dan Anda menyiapkan argumen JVM dengan benar, Anda mungkin memiliki masalah fragmentasi memori. Periksa memori maksimum Java pada Windows XP .

daramasala
sumber
2

Jika Anda menjalankan JVM 32bit, mengubah ukuran tumpukan menjadi lebih kecil mungkin akan membantu. Anda dapat melakukan ini dengan meneruskan args ke java secara langsung atau melalui variabel lingkungan seperti mengikuti,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

Untuk JVM 64bit, ukuran heap yang lebih besar seperti -Xms512M -Xmx1536Mharus bekerja.

Jalankan java -versionatau java -d32, java--d64untuk Java7 untuk memeriksa versi yang Anda jalankan.

h - n
sumber
1

Bagaimanapun, berikut adalah cara memperbaikinya: Pergi ke Start-> Control Panel-> System-> Advanced (tab) -> Variabel Lingkungan-> Variabel Sistem-> Baru: Nama variabel: _JAVA_OPTIONS Nilai variabel: -Xmx512M

ATAU

Ubah panggilan semut seperti yang ditunjukkan di bawah ini.

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

Ini berhasil untuk saya.

Sudhakar
sumber
1

Kesalahan terjadi selama inisialisasi VM Tidak dapat memesan ruang yang cukup untuk tumpukan objek 1572864KB

Saya mengubah nilai memori dalam file settings.grade 1536 ke 512 dan itu membantu

Haris Durrani
sumber
1

Pergi ke Start-> Control Panel-> System-> Advanced (tab) -> Variabel Lingkungan-> Variabel Sistem-> Baru:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
El mehdi AZROUR
sumber
Pengaturan ini secara global membatasi ukuran tumpukan yang dapat Anda berikan kepada IntelliJ.
user3056052
0

Jika Anda menjalankan program java: - jalankan program Anda di terminal menggunakan perintah yang benar untuk linux itu akan menjadi 'java -jar myprogram.jar' dan tambahkan -Xms256m -Xmx512m, misalnya: 'java -jar myprogram.jar Xms256m -Xmx512m '

Jika Anda menjalankan skrip .sh (linux, mac?) Atau skrip .bat (windows) buka skrip dan cari opsi java jika ada dan tingkatkan memori.

Jika semua hal di atas tidak berhasil, periksa proses Anda (ctrl + alt + delete di windows) (ps aux di linux / mac) dan matikan proses yang menggunakan banyak memori dan tidak diperlukan untuk sistem operasi Anda! => Cobalah untuk menjalankan kembali program Anda.

Fico
sumber
0

Di CASSANDRA_HOME / bin / cassandra.bat Anda akan menemukan konfigurasi berikut

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

Anda dapat mengurangi 2G ke angka yang lebih kecil misalnya 1G atau bahkan lebih rendah dan itu harus berfungsi.

Sama jika Anda menjalankan kotak unix, ubah file .sh dengan tepat.

Deepak Singhvi
sumber
0

Saya mendapat kesalahan yang sama dan teratasi ketika saya menghapus file temp menggunakan% temp% dan memulai kembali gerhana.

Viswanath Nuggu
sumber
0

Terkadang itu berhubungan dengan

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Jika Anda mengaturnya ke:

$ sysctl vm.overcommit_memory=0

Itu harus bekerja.

kay
sumber
0

Ganti -Xmx2Gdengan -Xms512Matau ukuran memori yang lebih besar dalam file cassandra.bat dalam direktori cassandra bin.

kiran
sumber
0

Buka file gradle.properties di folder android.

Ganti baris ini:

org.gradle.jvmargs=-Xmx1536M

dengan:

org.gradle.jvmargs=-Xmx512m

Penjelasan: Batas maksimum dari dokumen Gradle:

Jika lingkungan build yang diminta tidak menentukan ukuran heap maksimum, Daemon akan menggunakan heap hingga 512MB.

cinta hidup
sumber
-2

Tidak perlu melakukan apa pun hanya chnage dalam file POM seperti di bawah ini

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>
Harish
sumber
2
Siapa yang mengatakan sesuatu tentang file POM?
Henley Chiu