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



Cuba Instrumen Kami Untuk Menghapuskan Masalah

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 ruang yang cukup untuk tumpukan objek'.



Ini mungkin kelihatan agak ganjil kerana kemungkinan besar anda mempunyai RAM yang cukup untuk menjalankan perintah, tetapi ini disebabkan oleh kebiasaan tertentu dalam cara halaman memori fizikal dan maya digunakan. Menentukan beberapa ukuran 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 mencuba menjalankan java dan mendapatkan mesej ini, 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 mahu 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 sebaliknya 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 dalam sesi yang 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. Itu kerana ia biasanya berlaku pada mesin dengan RAM fizikal yang banyak tetapi lebih rendah cara menggunakannya. Java akan berusaha untuk memperuntukkan blok besar hanya untuk diberitahu bahawa ia tidak dapat dilakukan, yang ditafsirkan sebagai kehabisan memori.

Kaedah 3: Mencetak Pilihan Java Semasa

Sekiranya anda telah bekerja di baris perintah dan ingin merujuk cepat kepada apa yang anda tetapkan pada nilai _JAVA_OPTIONS, maka 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 cukup ruang untuk timbunan objek' jika anda benar-benar mendapati diri anda benar-benar berada di hujung memori maya. Sekiranya ini berlaku, maka anda perlu menyemak semula proses apa yang sedang dijalankan dan mungkin memulakan semula pelayan jika itu adalah 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 telah memasang pakej Java 64-bit kerana semestinya kebal terhadap masalah ini. Keperluan memori bersebelahan hanya berlaku untuk versi Java 32-bit. Kami mendapati dalam beberapa kes versi 64-bit cuba membuat mesin maya 32-bit, jadi menentukan pilihan -d64 pada baris perintah memperbaikinya untuk kami.

3 minit membaca