Nesne yığını için yeterli alan ayıramadı


277

Programı her çalıştırmaya çalıştığımda aşağıdaki özel durumu tekrar tekrar alıyorum.

VM başlatılırken hata oluştu

Nesne yığını için yeterli alan ayıramadı

Java sanal makinesi oluşturulamadı.

Sanal belleğimi (sayfa boyutu) ve RAM boyutumu artırmaya çalıştım, ancak boşuna.

Bu hatayı nasıl ortadan kaldırabilirim?


olası Java
ayıramadı

2
Ayrıca sanal makinemde jdk / jre 1.6 kullanırken bu hatayı alıyorum, yorumlarda verilen yapılandırma değerlerini değiştirmeye çalıştım, ancak bu yardımcı olmadı, jdk 1.7'ye güncelledikten sonra hata gitti ve daha büyük Xmx parametreleri uygulandı. Java 1.6'dan beri yığın kullanımında birçok değişiklik var gibi görünüyor.
Alexander.Iljushkin

Yanıtlar:


214

JVM'yi -XX:MaxHeapSize=512m(veya istediğiniz kadar büyük bir sayıyla) (veya -Xmx512mkısaca) çalıştırın


42
Veya daha kısa, -mx256m veya -mx512m;)
Peter Lawrey

8
-Mx, -Xmx ve -XX: MaxHeapSize ile aynı mıdır?
Erty Seidohl

19
Teşekkürler .. çok büyük bir sayı da bir sorun olabilir ve aynı hatayı verebilir çıkıyor!
Dinesh Rajan

17
Gerçekten% 100 çalışan bir çözüm buldunuz mu? Bu çözüm sorunu geçici olarak çözer, ancak aniden geri döner. 16GB RAM'im var ve bu boktan bıktım. Eski günlerde her şey daha iyiydi: [
Nilzor

6
Windows 8'de x86 veya x64 Java ile benim için çalışmıyor.
AndrewSmiley

128

Bunun nedeni, 32 bit HotSpot vm'de çok büyük bir şey ayarlanması olabilir, örneğin:

-Xms1536m -Xmx1536m

nerede bu kudreti / ederim çalışır:

-Xms1336m -Xmx1336m

5
32-bit komut kabuğunda başlatırken bu sorunun oluşması gerektiğini belirtmeyi unutmuşum. 64-bit komut kabuğunda bu sorun olmayabilir.
djangofan

Benim için varsayılan değerle ve çok büyük bir değerle başarısız oldu, bu yüzden birden fazla değeri denediğinizden emin olun. Cevap için teşekkürler!
Trax

47

İşte nasıl düzeltilir:

  • Başlat-> Denetim Masası-> Sistem-> Gelişmiş (sekme) -> Ortam Değişkenleri-> Sistem

    Değişkenler-> Yeni: Değişken adı: _JAVA_OPTIONS Değişken değeri: -Xmx512M Değişken adı: Path
    Değişken değeri:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Bunu uygun yolunuzla değiştirin.


1
Bu cevaba çok benzer , diyebilirim ki ...
That1Guy,

İyi bir. Yukarıdakilerle birlikte bunu da belirtin. stackoverflow.com/a/9350506/967638
Amarnath

46

Javac kullanırken buna rastladım ve komut satırı seçeneklerinde görünmüyor,

-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.

buradaki çözüm ayarlandı _JAVA_OPTIONS

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

Ve bu iyi derler.

Bu bana çok fazla RAM bulunan, ancak daha düşük bellek ulimitli makinelerde olur. Java, makinedeki koçu tespit ettiğinden büyük bir yığın ayırmaya karar verir, ancak ulimitler nedeniyle ayırmasına izin verilmez.


1
_JAVA_OPTIONS işaret için +1 - benim durumumda java yazma erişimi olmayan bir kabuk komut dosyası içinde derin bir yerden çağrılır, bu nedenle bu seçenek tercih edilir.
gerrit

Burada aynı. Üniversite bilgisayarları kullanıyorum bu yüzden yönetici değilim (çevresel değişkenleri değiştiremiyorum) ve komut satırı seçeneği hiç çalışmıyordu. Çok teşekkürler!
Kimbluey

38

32 bit Java, çalışması için bellekte bitişik boş alan gerektirir. Büyük bir yığın boyutu belirtirseniz, gerekenden çok daha fazla boş alanınız olsa bile bellekte çok fazla boş alan olmayabilir.

Java'nın 64 bit sürümünü yüklemek bu durumlarda yardımcı olur, bitişik bellek gereksinimleri yalnızca 32 bit Java için geçerlidir.


1
Ben -Xmx [bignumber] m seçeneğini kullandıktan sonra hata almaya devam ederseniz bu en iyi cevap olduğunu düşünüyorum. Apache jMeter'i düzgün çalıştırmama yardımcı oldu.
RuudvK

Otomatik olarak oluşturulan ana etkinlik dışında hiçbir kod olmadan yepyeni bir proje oluşturdum ve bu hatayı üretti
behelit 11:18

1
İkinci olarak @RuudvK. 64 bit takmak, bellek ayırma hatasını silerken maksimum belleği artırmama izin verdi. Bu kabul edilen cevap olmalı.
J Weezy

28

-Xmx512M ile birlikte 64 bit VM kullandığınızdan emin olmak için -d64 kullanın. 64 bitlik bir makinede 64 bitlik sanal makine çalıştırdığımı düşündüm, ama hayır. 64 bit Java yüklendikten sonra -d64 seçeneği çalışır ve -Xmx çok daha büyük bellek boyutlarına izin verir.

java -d64 -Xmx512M mypackage.Test

4
Bu cevap en üstte olmalıdır. Sadece 64 bit Java yüklemesinin sorunu çözdüğünü anlamak için bu sorunla savaşmak iki ay geçirdim (benim durumumda -d64 seçeneği gerekli değildi)
Nilzor

Alındı ​​_JAVA_OPTIONS: -d64 -Xmx1024M Tanınmayan seçenek: -d64 JVM başlatılamadı. Maksimum yığın boyutu (-Xmx) çok büyük olabilir veya bir virüsten koruma veya güvenlik duvarı aracı yürütmeyi engelleyebilir.
Alexander

14

Aynı hatayı aldım ve run.conf.bat içinde yapılandırarak bunu çözdüm

JVM'yi Jboss5x yapılandırma run.conf.bat ile çalıştırın

İfadeyi ilettiğiniz gibi boş bellek yoksa, lütfen run.conf.bat dosyasında değişiklik yapın

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"

7

Burada zaten birçok cevap olduğunu biliyorum, ama hiçbiri bana yardımcı olmadı. Sonunda dosyayı açtım /etc/elasticsearch/jvm.optionsve değiştim:

-Xms2G
-Xmx2G

için

-Xms256M
-Xmx256M

Bu benim için çözdü. Umarım bu başka birine yardım eder.


7

Benzer sorunlar yaşadım. 64 bit makineye 32 bit Java sürümü yükledim.

Bu sürümü kaldırarak ve Java'nın 64 bit sürümünü yükleyerek. Sorunu çözebildim.


6

Sınıfınızın Testpakette çağrıldığını varsayalım mypackage. Kodunuzu şu şekilde çalıştırın:

java -Xmx1024m mypackage.Test

Bu, kodunuz için 1024 MB yığın alan ayıracaktır. 512 MB istiyorsanız şunları kullanabilirsiniz:

java -Xmx512m mypackage.Test

Küçük m kullanın 1024m, 512mvb


6

Bazen bu hata, sunucudaki fiziksel bellek ve takasın gerçekten tamamen kullanıldığını gösterir!

Son zamanlarda 48 GB RAM ile RedHat Enterprise Linux 5.7 çalıştıran bir sunucuda bu sorunu görüyordum. Sadece koşarken bile buldum

java -version

aynı hataya neden oldu, bu da sorunun uygulamam için özel olmadığını belirledi.

Koşu

cat /proc/meminfo

MemFree ve SwapFree'nin MemTotal ve SwapTotal değerlerinin sırasıyla% 1'inin altında olduğunu bildirdi:

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

Makinede çalışan diğer birkaç uygulamayı durdurmak, boş bellek rakamlarını bir miktar gündeme getirdi:

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

Bu noktada, yeni bir Java örneği çalışmaya başlayacaktı ve uygulamamı çalıştırabildim.

(Açıkçası, benim için bu sadece geçici bir çözümdü; Nominal bellek kullanım seviyelerini azaltmak için yapılabilecek bir şey olup olmadığını görmek için o makinede çalışan süreçlerin daha ayrıntılı bir incelemesini yapmak için hala olağanüstü bir görevim var. durdurma uygulamalarına başvurmak zorunda.)


Aynı burada, java -versionüst bazı hala ücretsiz gösterdi rağmen başarısız: | (ayrıca VM'nin başlatılması sırasında Hata oluştu, bazen kart işaretleme dizisi için yeterli alan ayıramadı). Düzeltme, en üstte çalışıyor gibi görünüyordu, hangi işlemlerin en çok RAM (VIRT sütunu) kullandığını, onları öldürdüğünü [postgres, benim için appdynamics]: |
rogerdpack

Bunun nedeni bellek parçalanması olabilir mi? Yukarıdaki yanıt bitişik boş alandan bahsediyor.
Rick Moritz

6

Hata :

Hata için, "vm başlatılırken hata oluştu nesne yığını jboss için yeterli alan ayıramadı"

Ana neden :

  • Aşağıda belirtildiği gibi JVM'ye yanlış / yetersiz bellek tahsisi.

  • örneğin, JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" , jboss-eap-6.2 \ bin \ standalone.conf veya "JAVA_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256m" , jboss-eap-6.2 \ bin \ standalone.conf.bat ki bu JVM bellek ayırma havuzu parametrelerinden başka bir şey değildir.

Çözüm :

  • Yığın boyutunu büyütün. Yığın boyutunu artırmak için,
  • git -> jboss-eap-6.2 \ bin \ standalone.conf.bat veya jboss-eap-6.2 \ bin \ standalone.conf
  • değiştir -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m", burada -Xms Minimum yığın boyutu ve -Xmx Maksimum yığın boyutu.
  • Genellikle min ve max için aynı boyuta sahip olması tavsiye edilmez.

  • Uygulamanızı tutulmadan çalıştırıyorsanız,

  • Sunucuya çift tıklayın
  • 'açılış yapılandırmasını aç'ı seçin' Başlangıç ​​yapılandırma özelliklerini düzenle 'penceresine yönlendirileceksiniz.
  • Bu rüzgârda '(x) = Bağımsız Değişkenler' sekmesine gidin.
  • VM Bağımsız Değişkenleri'nde, yığın boyutunuzu aşağıda belirtildiği gibi tanımlayın
  • "-Dprogram.name = JBossTools: JBoss EAP 6.1+ Çalışma Zamanı Sunucusu" -server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

Oracle Komut Satırı Referansından bir alıntı : " En iyi performans için, -Xms değerini maksimum yığın boyutuyla aynı boyuta ayarlayın, örneğin:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038

3

Son zamanlarda bu sorunla karşılaştım. 1024m veya 1280m yığın boyutuyla başlayan 3 java uygulamam var. Java, takastaki kullanılabilir alana bakıyor ve yeterli bellek yoksa jvm çıkar.

Bu sorunu çözmek için, büyük miktarda sanal bellek ayrılmış birkaç programı sonlandırmak zorunda kaldım.

64 bit jvm ile x86-64 linux üzerinde çalışıyordum.


3

Doğru miktarda bellek ayarım vardı ama benim için 32 bit jvm ile 64bit intellij kullanıyordu. 64 bit VM'ye geçtikten sonra hata ortadan kalktı.



2

32bit JVM çalıştırıyorsanız, yığın boyutunu daha küçük olarak değiştirin, muhtemelen yardımcı olacaktır. Bunu doğrudan java'ya argümanlar ileterek veya aşağıdaki gibi çevre değişkenleri aracılığıyla yapabilirsiniz,

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

64bit JVM için, daha büyük yığın boyutu -Xms512M -Xmx1536Mçalışması gerekir.

Çalıştır java -versionveya java -d32, java--d64Java7 için çalıştırmakta sürümü kontrol etmek.


1

Her neyse, nasıl düzeltilir: Başlat-> Denetim Masası-> Sistem-> Gelişmiş (sekme) -> Ortam Değişkenleri-> Sistem Değişkenleri-> Yeni: Değişken adı: _JAVA_OPTIONS Değişken değeri: -Xmx512M

VEYA

Karınca çağrısını aşağıdaki gibi değiştirin.

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

Benim için çalıştı.


1

VM başlatılırken hata oluştu 1572864KB nesne yığını için yeterli alan ayıramadı

Settings.grade dosyasındaki bellek değerini 1536'ya 512 olarak değiştirdim ve yardımcı oldu


1

Başlat-> Denetim Masası-> Sistem-> Gelişmiş (sekme) -> Ortam Değişkenleri-> Sistem Değişkenleri-> Yeni:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

Bunu genel olarak ayarlamak, IntelliJ'e verebileceğiniz yığın boyutunu sınırlar.
user3056052

0

Bir java programı çalıştırıyorsanız: - linux için doğru komutu kullanarak programınızı bir terminalde çalıştırın. Xms256m -Xmx512m '

Bir .sh betiği (linux, mac?) Veya bir .bat betiği (windows) çalıştırıyorsanız, betiği açın ve varsa java seçeneklerini arayın ve belleği artırın.

Yukarıdakilerin hepsi işe yaramazsa, işlemlerinizi kontrol edin (pencerelerde ctrl + alt + delete) (linux / mac üzerinde ps aux) ve bellek ayırması kullanan ve işletim sisteminiz için gerekli olmayan işlemleri öldürün! => Programınızı yeniden çalıştırmayı deneyin.


0

CASSANDRA_HOME / bin / cassandra.bat içinde aşağıdaki yapılandırmayı bulabilirsiniz

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**^

2G'yi 1G veya daha az için daha küçük bir sayıya düşürebilirsiniz ve çalışması gerekir.

Unix kutusunda çalışıyorsanız da .sh dosyasını uygun şekilde değiştirin.


0

Aynı hatayı aldım ve% temp% kullanarak ve tutulmayı yeniden başlatan geçici dosyaları sildiğimde çözüldü.


0

Bazen şu şekilde ilişkilidir:

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Bunu şu şekilde ayarlarsanız:

$ sysctl vm.overcommit_memory=0

İşe yaramalı.


0

Değiştir -Xmx2Gile -Xms512Mya cassandra bin dizinindeki cassandra.bat dosyada herhangi daha büyük bellek boyutu.


0

Gradle.properties dosyasını android klasöründe açın.

Bu satırı değiştirin:

org.gradle.jvmargs=-Xmx1536M

ile:

org.gradle.jvmargs=-Xmx512m

Açıklama: Gradle belgesinden maksimum sınır:

İstenen oluşturma ortamı bir maksimum yığın boyutu belirtmezse, Daemon 512MB'a kadar yığın kullanır.


-2

Hiçbir şey yapmaya gerek yok sadece aşağıdaki gibi POM dosyasında chnage

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

2
Kim bir POM dosyası hakkında bir şey söyledi?
Henley Chiu
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.