Düzeltme: VM'nin başlatılması sırasında hata oluştu, nesne yığını için yeterli alan ayıramadı

Java uygulamaları bugünlerde popüler bir web teknolojisi olmasa da, bir Java sanal makinesini doğrudan bir Linux sunucusuna yerleştirmek için sayısız neden vardır. Linux java komutunu doğrudan ayrı bir donanımda veya kendi sanal makinesinin içinde çalıştırmayı denerseniz, "sanal makinenin başlatılması sırasında oluşan bir hata, nesne yığını için yeterli alan ayıramadı" mesajı alabilirsiniz.

Bu muhtemelen oldukça tuhaf görünüyor çünkü komutu çalıştırmak için yeterli RAM'e sahip olmalısınız, ancak büyük ölçüde fiziksel ve sanal bellek sayfalarının kullanım biçimindeki belirli bir tuhaflıktan kaynaklanıyor. Bazı nispeten büyük boyutların belirtilmesi, bu mesajı tamamen atlamanıza ve java komutunu başka herhangi bir şekilde çalıştırmanıza izin vermelidir.

Yöntem 1: Komut Satırı Seçeneklerini Kullanma

Java'yı çalıştırmayı denediyseniz ve bu mesajı aldıysanız, programı çalıştırmak için bol miktarda bellek olduğundan emin olmak için muhtemelen ücretsiz komutu çalıştırmışsınızdır.

java ve ücretsiz komutlar

Test makinemizde 2.3 GB fiziksel RAM'e sahip olduğumuza ve henüz tek bir sanal belleğin kullanılmamış olduğuna dikkat edin. Hafıza sıkıntınız olduğunu fark ederseniz, tekrar denemeden önce çalıştırdığınız diğer şeyleri kapatmak isteyeceksiniz. Öte yandan, bol miktarda boş belleğe sahip olduklarını fark edenler doğrudan bir boyut belirlemeye çalışabilirler.

Örneğin, makinemizde komutu java -Xms256m -Xmx512M olarak çalıştırabildik ve normalde bekleneceği gibi çalıştı. Bu, Java sanal makinesinin başlangıçta ayırmaya çalıştığı yığın boyutunu sınırlar. Sınırlandırılmamış bir sanal makine varsayımsal olarak olağandışı şeyler yapabileceğinden, başka türlü özgür bir sisteme hata mesajları atabilir. Doğru kombinasyonu bulmadan önce bu iki değerle oynamak isteyebilirsiniz.

JVM'nin GNU / Linux'u çalıştırmak için kullanabileceğiniz VM türü ile hiçbir ilgisi olmadığından, onu ne çalıştırdığınızdan bağımsız olarak bu bir sorun olabilir.

Yöntem 2: Değişimi Kalıcı Hale Getirmek İçin Değişkenleri Dışa Aktarma

Çalışan bir değer bulduğunuzda, onu o oturum için kalıcı hale getirmek üzere dışa aktarabilirsiniz. Örneğin, bash komut isteminden export _JAVA_OPTIONS = '- Xms256M -Xmx512M' kullandık ve sunucumuzdan çıkış yapana kadar java komutunu başka hiçbir seçenek olmadan tek başına çalıştırmamıza izin verdi.

Başka bir oturumda oturum açtığımızda tekrar çalıştırılması gerekiyordu, bu nedenle java komutunu çok sık kullanmayı planlıyorsanız, onu ilgili başlangıç ​​komut dosyalarına eklemek isteyebilirsiniz. Satırı .bash_login dosyamıza ekledik ve her oturum açma istemi kullandığımızda tekrar çalıştırmaya gerek kalmadan çalışıyor gibi görünüyordu, ancak farklı bir kabukla çalışıyorsanız, başka bir konum bulmanız gerekebilir.

Bu hata mesajını yalnızca belirli donanım yapılandırmalarının tetiklediğini fark etmiş olabilirsiniz. Bunun nedeni, genellikle çok fazla fiziksel RAM'e sahip ancak nasıl kullanılacağı konusunda daha düşük ulimitlere sahip makinelerde gerçekleşmesidir. Java, yalnızca yapamayacağı söylenecek kadar büyük bir blok ayırmaya çalışacak ve hafızanın bitmesi olarak yorumlayacaktır.

Yöntem 3: Mevcut Java Seçeneklerini Yazdırma

Komut satırında çalışıyorsanız ve şu anda _JAVA_OPTIONS değerini ayarladığınız şeye hızlı bir referans istiyorsanız, o zaman basitçe echo $ _JAVA_OPTIONS komutunu çalıştırın ve hemen mevcut değerleri yazdıracaktır. Bu, denemek için doğru sayıları bulmaya çalışırken sorun giderme için kullanışlıdır.

Bu düzeltmenin başka herhangi bir oyun gerektirmemesine rağmen, kendinizi gerçekten sanal belleğin kısa ucunda bulursanız, Java'nın "nesne yığını için yeterli alan ayıramadı" mesajını atacağını unutmayın. Bu durumda, şu anda hangi işlemlerin çalıştığını iki kez kontrol etmek ve bir seçenek varsa, muhtemelen sunucuyu yeniden başlatmak isteyeceksiniz. Daha fazla takas alanı da oluşturabilirsiniz, ancak bu bir sorunsa, genellikle başka bir şekilde denemek ve düzeltmek daha iyidir.

Ayarlarınızın doğru göründüğü ancak yine de çalışmadığı nadir durumlarda, bu soruna karşı bağışık olması gerektiğinden 64 bit Java paketini yüklediğinizden emin olun. Bitişik bellek gereksinimleri yalnızca Java'nın 32 bit sürümü için geçerlidir. Birkaç durumda 64 bit sürümün 32 bitlik bir sanal makine oluşturmaya çalıştığını gördük, bu nedenle komut satırında -d64 seçeneğini belirtmek bizim için sorunu çözdü.