"VM'nin başlatılması sırasında hata oluştu; -Xmx3G kullanılarak "nesne yığını için yeterli alan ayıramadı"


94

Her şeyden önce, 8gb ram içeren bir kutum var, bu yüzden toplam hafızanın sorun olduğundan şüpheliyim. Bu uygulama, 6 gb veya daha düşük makinelerde sorunsuz çalışıyor.

Eclipse'de Yapılandırmaları Çalıştır'da "VM Argümanları" altında -Xmx3G kullanarak 3GB alan ayırmaya çalışıyorum.

1500 MB'den fazla ayırmaya çalıştığımda, şu hatayı alıyorum: “VM'nin başlatılması sırasında hata oluştu; -Xmx3G kullanılarak "nesne yığını için yeterli alan ayıramadı"

Burada neler oluyor?


2
Java'nın hangi sürümüne sahipsiniz? Hangi işletim sistemini kullanıyorsunuz?
Adam Rofer

Bu Win7 idi ve benim 3 farklı Java sürümüm vardı. Bunlardan biri, Eclipse'in kullandığı 32-bit JRE idi.
user1212731

3
Bir yanıtı doğru olarak işaretlemeyi unutmayın.
xdhmoore

Gridle.property'deki ayarı sutaible alanınızla değiştirin
Bhushan

Yanıtlar:


64

Bu makinede 32 bit jvm kullanıyor olabilir misiniz?


8
Aptal soru için üzgünüm ama bunu nasıl kontrol ederim? Ve 64 biti nasıl kullanabilirim?
user1212731

3
Aslında, komut satırında java -d64 sürümünü denedim ve 64 bit sunucu sanal makinesi ile geldi.
user1212731

6
Görünüşe göre Eclipse, en son kurulum 64 bit olmasına rağmen, önceden yüklediğim JRE'nin 32 bit sürümünü kullanıyordu. Bu sorunu çözmek için Tercihler -> Yüklü JRE'lerdeki ayarları değiştirdim. Cevabınız için çok teşekkür ederim!
user1212731

3
her durumda, 32 bit 4 gb'yi adreslemek için yeterli olmamalıdır
Thomas

7
Olmalı ama bu benim sorunumu çözüyor. Açıklama eksikliğinden dolayı bu cevaba olumlu oy verilmez. Bu bağlantı, 32bit bir jvm'nin 1 gb maksimum yığın alanını nasıl aşamayacağını açıklıyor
Steven

58

İşte bunu düzeltmek için yapılması gerekenler: Go 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;  

Bunu uygun yolunuza değiştirin .


4
Sadece diğerleri için bir not. KULLANICI değişkeni değil, SİSTEM değişkeni eklersiniz. Eclipse'de bu sorunla karşılaştım ve yukarıdaki değişiklikleri yaptıktan sonra makinemi yeniden başlatmam gerekmedi ... Sadece Eclipse'i yeniden başlatmam gerekti. Teşekkürler!
captain_jim1

Meraklı insanlar için, _JAVA_OPTIONS içindeki -Xmx bayrağı izin verilen maksimum JVM yığın boyutunu belirtir. Bu, JVM'nin mantıksız alan talep etmesini önler (özellikle 32 bit makineler için bitişik olarak
ayrılamaz

41

Bu aslında Eclipse'e özgü bir konu değildir; bu genel bir Windows üzerinde Java sorunudur. Bunun nedeni, JVM'nin Windows'ta bellek ayırma biçimidir; ayırma isteğini karşılamak için yeterli ayrı yığın olsa bile Windows'un sağlayamadığı bitişik bir bellek yığınını ayırmakta ısrar eder. Windows'un belleğini "birleştirmesine" yardımcı olan ve teorik olarak bu duruma yardımcı olacak yardımcı programlar vardır; ama onları gerçekten ciddiyetle denemedim, bu yüzden etkinlikleri hakkında konuşamıyorum. Bazen yardımcı olabileceğini duyduğum bir şey, Windows'u yeniden başlatmak ve diğer uygulamaları başlatmadan önce, büyük bir bellek parçasına ihtiyaç duyan Java uygulamasını başlatmaktır. Şanslıysanız, Windows henüz bellek alanını parçalamamış olmayacak ve Java, istenen bitişik bloğu alacaktır.

İnternette bir yerlerde bu konuyla ilgili daha teknik açıklamalar ve analizler var, ancak elimde herhangi bir referans yok.

Yine de faydalı görünen bunu buldum: https://stackoverflow.com/a/497757/639520


2
Benim durumumda cevabınız işe yarıyor gibi görünüyor. Pencereleri yeniden başlatmadım ancak pencerelerimdeki diğer uygulamaları kapatmayı denedim ve ardından java çalıştırdım ve sanal makineyi başlatabildi.
sttaq

22

İlk olarak 32 bitlik JRE, ~ 1.5 Gb ram kullanamaz. Yani daha fazlasını istiyorsanız 64 bit JRE kullanın.

İkinci olarak, yeni bir JVM başladığında, bu, çalışan tüm JVM'nin -Xmx özelliğini toplar ve sistemde kendi -Xmx'inde çalışmak için yeterli bellek olup olmadığını kontrol edin, eğer yeterli değilse, hata oluşur.


15

Eclipse IDE'den Tomcat sunucusu ile Liferay kullanıyordum. Sunucu başlatıldığında tıklandığında aynı hatayla karşılaştım. Eclipse'den sunucuya çift tıklayın. Sunucu Genel Bakış sayfasını açar. -Xmx1024m -XX: MaxPermSize = 256m'den -Xmx512m -XX: MaxPermSize = 256m'den güncellenmiş bellek bağımsız değişkenleri. Sonra benim için çalışıyordu.



9

Eclipse'in aslında çalıştığını düşündüğünüz aynı JVM'yi çalıştırdığından emin olun. Web tarayıcınızda java kullanırsanız, muhtemelen son zamanlarda yüklenirse veya güncellenirse öncelikli olabilecek 32 bitlik bir sürümünüz vardır.

Kesinlikle emin olmak için, bu iki satırı eclipse.inidosyanızın en üstüne eklemenizi tavsiye ederim :

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

... makinemde C:/Java/jdk1.6.0_27/bin64 bit olduğunu bildiğim JVM'nin bulunduğu yer. binKlasörün orada olduğundan emin olun .

(Bir bonus olarak, Windows 7'de, bu aynı zamanda aslında "sekmeyi sabitlemenize" olanak tanır, bu yüzden bunu kendi kullanımım için yapmak zorunda kaldım)


-Vm argümanı yalnızca bir klasörü değil, Java yürütülebilir dosyasını işaret etmelidir. Bkz. Wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
Yanlış. Şu Eclipse hatasını görün: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer

Gerçekten sorun buydu! Eclipse, bir noktada yüklediğim JRE'nin 32 bit sürümünü kullanıyordu. Cevabınız ve beni doğru yöne yönlendirdiğiniz için çok teşekkür ederim! Çok minnettarım
user1212731

@AdamRofer, bu hata ilginç, ancak özellikle Windows 7 ile ilgili ve Eclipse'i görev çubuğuna sabitlemeyle ilgili bir sorunu çözmek için. Genel olarak eclipse.ini, java yürütülebilir dosyasını işaret etmelidir, ancak Equinox başlatıcısı, -vm bir klasöre işaret ederse (en azından Windows'ta) bir java yürütülebilir dosyası arayacağı için akıllı görünmektedir.
E-Riz

@ E-Riz "gerekir" benim zevkime göre çok katıdır :) Umarım vm argümanını değiştirmeden hatayı çözerler. Sayfalarında güncellemeleri için faydalı olabilecek daha fazla bilgiyi burada eclipse.inibulabilirsiniz: wiki.eclipse.org/…
Adam Rofer

5

Bu, Yığın boyutu sorunudur. Senin düzenleyin .bat(Toplu dosyası). Yığın boyutu 1024 gösteriyor olabilir. 512 olarak değiştirin Daha sonra çalışması gerekir.


2

32 bit ve kullandığı JVM 64 bit olan Eclipse'i kullanırken de aynı problemi yaşadım. Eclipse'i 32 bit JVM'ye yönlendirdiğimde çalıştı


2

Sadece gradle'ın #önüne sembol koyun org.gradle.jvmargs=-Xmx1536m. Özellikler

 # org.gradle.jvmargs=-Xmx1536m

Mac işletim sisteminde Kotlin-multiplatform'u denerken nasıl çalıştığından emin değilim! neyse, teşekkürler!
Chintan Soni

1

Biraz geciktiğimi biliyorum ama işte cevabım geliyor:

Oracle'dan Java çevrimiçi Sürümünü (çevrimdışı 64 Bit olanı değil) yükledim.

JAVA_HOME ENV değişkenini ekledikten sonra, şimdi çalıştı!

Umarım yardımcı olabilirim :)


0

Muhtemelen yine de yanlış seçenekleri deniyorsunuz. Destekleyen hata günlüğüyle ilgili benzer bir hata aldım:

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

Benim durumum, yazılım henüz java 8'i desteklemiyordu (komut dosyası eski JVM argümanlarını kullanıyordu) ancak varsayılan olarak java 8'e sahiptim.


0

Bu sorunun nedenlerinden biri Tomcat'in başlatabileceği bellek olmamasıdır. İstenmeyen çalışan yazılımı pencerelerden silmeyi ve eclipse ve tomcat'i yeniden başlatmayı deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.