Betulkan: Ralat berlaku semasa inisialisasi VM tidak dapat menyimpan ruang yang cukup untuk timbunan objek

Walaupun applet Java bukan teknologi web yang popular hari ini, ada banyak alasan untuk menggunakan mesin virtual Java secara langsung di pelayan Linux. Sekiranya anda cuba menjalankan perintah java Linux secara langsung sama ada pada perkakasan diskrit atau di dalam VMnya sendiri, maka anda mungkin mendapat "ralat yang berlaku semasa inisialisasi VM tidak dapat menyimpan cukup ruang untuk timbunan objek".

Ini mungkin kelihatan agak ganjil kerana kemungkinan besar anda mempunyai RAM yang cukup untuk menjalankan perintah, tetapi sebahagian besarnya disebabkan oleh kebiasaan tertentu dalam cara halaman memori fizikal dan maya digunakan. Menentukan beberapa saiz yang agak besar akan membolehkan anda memintas sepenuhnya mesej ini dan menjalankan perintah java seperti yang anda lakukan.

Kaedah 1: Menggunakan Pilihan Baris Perintah

Sekiranya anda telah cuba menjalankan java dan mendapat mesej ini, maka anda mungkin sudah menjalankan perintah percuma untuk memastikan bahawa terdapat banyak memori untuk menjalankan program ini.

arahan java & percuma

Perhatikan bahawa di mesin ujian kami, kami mempunyai kira-kira 2,3 GB RAM fizikal dan belum ada satu halaman memori maya yang digunakan. Sekiranya anda menyedari bahawa anda mempunyai masalah memori, anda pasti ingin menutup perkara lain yang anda jalankan sebelum mencubanya lagi. Sebaliknya, mereka yang mendapati bahawa mereka mempunyai banyak memori bebas boleh mencuba menentukan ukuran secara langsung.

Sebagai contoh, pada mesin kami, kami dapat menjalankan perintah sebagai java -Xms256m -Xmx512M dan ia berfungsi seperti yang diharapkan. Ini mengehadkan ukuran timbunan yang cuba disimpan oleh mesin maya Java pada permulaan. Oleh kerana mesin maya yang tidak terkawal dapat membuat perkara yang tidak biasa secara hipotesis, ia mungkin membuang mesej ralat pada sistem yang bebas. Anda juga mungkin mahu bermain-main dengan dua nilai tersebut sebelum anda menemui kombinasi yang tepat.

Ini boleh menjadi masalah tanpa mengira apa yang anda jalankan kerana JVM tidak ada kaitan dengan jenis VM yang mungkin anda gunakan untuk menjalankan GNU / Linux.

Kaedah 2: Mengeksport Pemboleh ubah untuk Membuat Perubahan Kekal

Apabila anda menemui nilai yang berfungsi, anda boleh mengeksportnya untuk menjadikannya kekal untuk sesi tersebut. Sebagai contoh, kami menggunakan eksport _JAVA_OPTIONS = '- Xms256M -Xmx512M' dari command prompt bash dan ini membolehkan kami menjalankan perintah java dengan sendirinya tanpa pilihan lain sehingga kami log keluar dari pelayan kami.

Ia perlu dijalankan lagi ketika kita masuk ke sesi lain, jadi anda mungkin ingin menambahkannya ke skrip permulaan yang relevan jika anda sering menggunakan perintah java. Kami menambahkan baris ke fail .bash_login kami dan sepertinya berfungsi setiap kali kami menggunakan prompt log masuk tanpa perlu menjalankannya lagi, walaupun anda mungkin harus mencari lokasi lain untuknya jika anda bekerja dengan shell yang lain.

Anda mungkin menyedari bahawa hanya konfigurasi perkakasan tertentu yang mencetuskan mesej ralat ini. Ini kerana ia biasanya berlaku pada mesin dengan RAM fizikal yang banyak tetapi kekurangan untuk menggunakannya. Java akan berusaha untuk memperuntukkan blok besar hanya untuk diberitahu bahawa ia tidak boleh, yang ditafsirkan sebagai kehabisan memori.

Kaedah 3: Mencetak Pilihan Java Semasa

Sekiranya anda telah bekerja di baris arahan dan ingin merujuk cepat kepada apa yang anda tetapkan nilai _JAVA_OPTIONS pada masa ini, kemudian jalankan echo $ _JAVA_OPTIONS dan ia akan segera mencetak nilai semasa. Ini berguna untuk menyelesaikan masalah semasa anda berusaha mencari angka yang tepat untuk dicuba.

Perlu diingat bahawa walaupun pembaikan ini tidak memerlukan permainan lain, Java akan membuang mesej "tidak dapat menempah ruang yang cukup untuk tumpukan objek" jika anda benar-benar mendapati diri anda benar-benar berada di hujung memori maya yang pendek. Sekiranya ini berlaku, maka anda perlu menyemak semula proses apa yang sedang dijalankan dan mungkin memulakan semula pelayan jika itu pilihan. Anda juga boleh membuat lebih banyak ruang pertukaran, tetapi jika ini adalah masalah, lebih baik mencuba dan membetulkannya dengan cara lain.

Sekiranya tetapan anda nampaknya betul tetapi masih tidak berfungsi, pastikan anda memasang pakej Java 64-bit kerana semestinya kebal terhadap masalah ini. Keperluan memori bersebelahan hanya berlaku untuk versi 32-bit Java. Kami mendapati dalam beberapa kes versi 64-bit cuba membuat mesin maya 32-bit, jadi menentukan pilihan -d64 pada baris perintah memperbaikinya untuk kami.