Es konnte nicht genügend Speicherplatz für den Objekthaufen reserviert werden

277

Bei jedem Versuch, das Programm auszuführen, wird wiederholt die folgende Ausnahme angezeigt.

Bei der Initialisierung der VM ist ein Fehler aufgetreten

Es konnte nicht genügend Speicherplatz für den Objekthaufen reserviert werden

Die virtuelle Java-Maschine konnte nicht erstellt werden.

Ich habe versucht, meinen virtuellen Speicher (Seitengröße) und RAM-Größe zu erhöhen, aber ohne Erfolg.

Wie kann ich diesen Fehler beseitigen?

Narendra
quelle
2
Ich erhalte diesen Fehler auch, wenn ich jdk / jre 1.6 auf meiner virtuellen Maschine verwende. Ich habe versucht, die in den Kommentaren angegebenen Konfigurationswerte zu ändern, aber dies hat nicht geholfen. Nach dem Update auf jdk 1.7 ist der Fehler behoben und es wurden größere Xmx-Parameter angewendet. Es scheint, dass es seit Java 1.6 viele Änderungen bei der Heap-Nutzung gibt.
Alexander.Iljushkin

Antworten:

214

Führen Sie die JVM mit -XX:MaxHeapSize=512m(oder einer beliebigen großen Zahl nach Bedarf) (oder -Xmx512mkurz) aus.

Bozho
quelle
42
Oder die kürzeren, -mx256m oder -mx512m;)
Peter Lawrey
8
Ist -mx dasselbe wie -Xmx und -XX: MaxHeapSize?
Erty Seidohl
19
Danke .. stellt sich heraus, dass eine zu große Zahl auch ein Problem sein könnte und den gleichen Fehler geben kann!
Dinesh Rajan
17
Hat jemand eine Lösung gefunden, die tatsächlich 100% der Zeit funktioniert? Diese Lösung löst das Problem vorübergehend, kommt dann aber plötzlich wieder. Ich habe 16 GB RAM und ich habe es satt.
Früher
6
Funktioniert bei Windows 8 mit x86 oder x64 Java nicht.
AndrewSmiley
128

Dies kann auch dadurch verursacht werden, dass auf einem 32-Bit-HotSpot-VM etwas zu groß eingestellt ist, zum Beispiel:

-Xms1536m -Xmx1536m

wo dies funktionieren könnte / würde :

-Xms1336m -Xmx1336m
Djangofan
quelle
5
Ich habe vergessen zu erwähnen, dass dieses Problem beim Starten in einer 32-Bit-Befehlsshell auftreten muss. Eine 64-Bit-Befehlsshell hat dieses Problem möglicherweise nicht.
Djangofan
Für mich ist es mit dem Standardwert und einem zu großen Wert fehlgeschlagen. Versuchen Sie also, mehrere Werte auszuprobieren. Danke für die Antwort!
Trax
47

So beheben Sie das Problem:

  • Gehen Sie zu Start-> Systemsteuerung-> System-> Erweitert (Registerkarte) -> Umgebungsvariablen-> System

    Variablen-> Neu: Variablenname: _JAVA_OPTIONS Variablenwert: -Xmx512M Variablenname: Path
    Variablenwert:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Ändern Sie dies in Ihren entsprechenden Pfad.

Mohamed Adel
quelle
1
Ziemlich ähnlich zu dieser Antwort würde ich sagen ...
That1Guy
Gut. Zusammen mit den oben genannten beziehen sich auch diese. stackoverflow.com/a/9350506/967638
Amarnath
46

Ich bin darauf gestoßen, als ich Javac verwendet habe, und es scheint nicht in den Befehlszeilenoptionen zu funktionieren.

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

Also die Lösung hier setzt es also _JAVA_OPTIONS

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

Und das kompiliert gut.

Dies passiert mir auf Computern mit viel RAM, aber weniger Speicherplatz. Java beschließt, einen großen Heap zuzuweisen, da es den RAM in der Maschine erkennt, ihn jedoch aufgrund von Einschränkungen nicht zuweisen darf.

Jens Timmerman
quelle
1
+1 für den Hinweis auf _JAVA_OPTIONS - In meinem Fall wird Java von irgendwo tief in einem Shell-Skript aufgerufen, auf das ich keinen Schreibzugriff habe. Daher ist diese Option vorzuziehen.
Gerrit
Hier gilt das gleiche. Ich verwende Universitätscomputer, bin also kein Administrator (kann Umgebungsvariablen nicht ändern) und die Befehlszeilenoption funktionierte überhaupt nicht. Vielen Dank!
Kimbluey
38

32-Bit-Java benötigt zum Ausführen zusammenhängenden freien Speicherplatz im Speicher. Wenn Sie eine große Heap-Größe angeben, ist möglicherweise nicht so viel zusammenhängender freier Speicherplatz im Speicher vorhanden, selbst wenn Ihnen viel mehr freier Speicherplatz als erforderlich zur Verfügung steht.

Die Installation einer 64-Bit-Version von Java hilft in diesen Fällen. Die zusammenhängenden Speicheranforderungen gelten nur für 32-Bit-Java.

JohnEye
quelle
1
Ich denke, dies ist die beste Antwort für den Fall, dass Sie nach Verwendung der Option -Xmx [bignumber] m weiterhin den Fehler erhalten. Hat mir geholfen, Apache jMeter richtig auszuführen.
RuudvK
Ich habe ein brandneues Projekt erstellt, das keinen anderen Code als die automatisch generierte Hauptaktivität enthält, und es hat diesen Fehler verursacht
siehe
1
Ich zweite @RuudvK. Durch die Installation von 64-Bit konnte ich den maximalen Speicher erhöhen und gleichzeitig den Speicherzuordnungsfehler beheben. Dies sollte die akzeptierte Antwort sein.
J Weezy
28

In Kombination mit -Xmx512M verwenden Sie -d64, um sicherzustellen, dass Sie eine 64-Bit-VM ausführen. Auf einer 64-Bit-Maschine dachte ich sicher, dass ich eine virtuelle 64-Bit-Maschine laufen würde, aber nein. Nach der Installation von 64-Bit-Java funktioniert die Option -d64 und -Xmx ermöglicht viel größere Speichergrößen.

java -d64 -Xmx512M mypackage.Test
Axl
quelle
4
Diese Antwort sollte oben stehen. Verbrachte zwei Monate damit, dieses Problem zu bekämpfen, nur um zu erkennen, dass die Installation von 64-Bit-Java das Problem gelöst hat (die Option -d64 war in meinem Fall nicht erforderlich)
Nilzor
Abgenommen _JAVA_OPTIONS: -d64 -Xmx1024M Nicht erkannte Option: -d64 Die JVM konnte nicht gestartet werden. Die maximale Heap-Größe (-Xmx) ist möglicherweise zu groß oder ein Antiviren- oder Firewall-Tool blockiert möglicherweise die Ausführung.
Alexander
14

Ich habe den gleichen Fehler erhalten und diesen behoben, indem ich ihn in der run.conf.bat konfiguriert habe

Führen Sie die JVM mit der Konfiguration run.conf.bat in Jboss5x aus

Wenn kein freier Speicher verfügbar ist, während Sie die Anweisung übergeben, nehmen Sie bitte Änderungen in run.conf.bat vor

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"
Ankam Shyamsundar
quelle
7

Ich weiß, dass es hier bereits viele Antworten gibt, aber keine hat mir geholfen. Am Ende habe ich die Datei geöffnet /etc/elasticsearch/jvm.optionsund geändert:

-Xms2G
-Xmx2G

zu

-Xms256M
-Xmx256M

Das hat es für mich gelöst. Hoffentlich hilft das jemand anderem hier.

kramer65
quelle
7

Ich hatte ähnliche Probleme. Ich hatte eine 32-Bit-Version von Java auf einem 64-Bit-Computer installiert.

Durch Deinstallieren dieser Version und Installieren der 64-Bit-Version von Java. Ich konnte das Problem beheben.

Manu Sharma
quelle
6

Angenommen, Ihre Klasse wird Testim Paket aufgerufen mypackage. Führen Sie Ihren Code folgendermaßen aus:

java -Xmx1024m mypackage.Test

Dadurch werden 1024 MB Heap-Speicherplatz für Ihren Code reserviert. Wenn Sie 512 MB möchten, können Sie verwenden:

java -Xmx512m mypackage.Test

Verwenden Sie wenig m 1024m, 512musw.

Euphorie83
quelle
6

Manchmal zeigt dieser Fehler an, dass der physische Speicher und der Swap auf dem Server tatsächlich voll ausgelastet sind!

Ich habe dieses Problem kürzlich auf einem Server mit RedHat Enterprise Linux 5.7 mit 48 GB RAM festgestellt. Ich fand das sogar nur rennen

java -version

verursachte den gleichen Fehler, der feststellte, dass das Problem nicht spezifisch für meine Anwendung war.

Laufen

cat /proc/meminfo

berichteten, dass MemFree und SwapFree beide deutlich unter 1% der MemTotal- bzw. SwapTotal-Werte lagen:

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

Durch das Stoppen einiger anderer laufender Anwendungen auf dem Computer wurden die Zahlen für den freien Speicher etwas erhöht:

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

Zu diesem Zeitpunkt würde eine neue Java-Instanz in Ordnung gestartet, und ich konnte meine Anwendung ausführen.

(Für mich war dies natürlich nur eine vorübergehende Lösung. Ich habe immer noch eine herausragende Aufgabe, die auf diesem Computer ausgeführten Prozesse eingehender zu untersuchen, um festzustellen, ob etwas getan werden kann, um die nominale Speichernutzung zu reduzieren, ohne auf das Stoppen von Anwendungen zurückgreifen müssen.)

Jon Schneider
quelle
Gleiches hier, java -versionscheitern, obwohl oben noch einige freie zeigten: | (Auch der Fehler ist während der Initialisierung der VM aufgetreten. Manchmal konnte nicht genügend Speicherplatz für das Kartenmarkierungsarray reserviert werden.) Fix schien darin zu bestehen, oben zu laufen, nach den Prozessen zu suchen, die den meisten RAM verwendeten (VIRT-Spalte), sie zu töten [postgres, appdynamics for me]: |
Rogerdpack
Könnte dies an einer Speicherfragmentierung liegen? Eine Antwort oben erwähnt zusammenhängenden freien Speicherplatz.
Rick Moritz
6

Error :

Für den Fehler "Fehler während der Initialisierung von vm aufgetreten, konnte nicht genügend Speicherplatz für den Objektheap jboss reserviert werden"

Ursache :

  • Unsachgemäße / unzureichende Speicherzuordnung zu unserer JVM wie unten erwähnt.

  • zB JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" in jboss-eap-6.2 \ bin \ standalone.conf oder "JAVA_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256M" in jboss-eap-eap-6. \ standalone.conf.bat, das nichts anderes als die Parameter des JVM-Speicherzuweisungspools ist.

Auflösung :

  • Erhöhen Sie die Heap-Größe. Um die Größe des Heapspeichers zu erhöhen,
  • gehe zu -> jboss-eap-6.2 \ bin \ standalone.conf.bat oder jboss-eap-6.2 \ bin \ standalone.conf
  • change -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m" wobei -Xms die minimale Heap-Größe und -Xmx die maximale Heap-Größe ist.
  • Normalerweise wird nicht empfohlen, für min und max die gleiche Größe zu haben.

  • Wenn Sie Ihre Anwendung über Eclipse ausführen,

  • Doppelklicken Sie auf den Server
  • Wählen Sie "Startkonfiguration öffnen". Sie werden zum Fenster "Startkonfigurationseigenschaften bearbeiten" weitergeleitet.
  • In diesem Fenster gehen Sie zur Registerkarte '(x) = Argumente'.
  • Definieren Sie unter VM-Argumente Ihre Heap-Größe wie unten beschrieben
  • "-Dprogram.name = JBossTools: JBoss EAP 6.1+ Runtime Server" -Server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg.jboss.resolver.warning = true
Prabhakar
quelle
Ein Zitat aus der Oracle-Befehlszeilenreferenz : " Um die beste Leistung zu erzielen, setzen Sie -Xms auf dieselbe Größe wie die maximale Heap-Größe, zum Beispiel:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038
3

Ich war kürzlich mit diesem Problem konfrontiert. Ich habe 3 Java-Anwendungen, die mit 1024m oder 1280m Heap-Größe beginnen. Java überprüft den verfügbaren Speicherplatz in Swap. Wenn nicht genügend Speicher verfügbar ist, wird der JVM beendet.

Um das Problem zu beheben, musste ich mehrere Programme beenden, denen eine große Menge an virtuellem Speicher zugewiesen war.

Ich lief unter x86-64 Linux mit einem 64-Bit-JVM.

codeDr
quelle
3

Ich hatte die richtige Menge an Speichereinstellungen, aber für mich wurde ein 64-Bit-Intellij mit 32-Bit-JVM verwendet. Nachdem ich auf 64-Bit-VM umgestellt hatte, war der Fehler behoben.

vsingh
quelle
2

Angenommen, Sie haben genügend freien Speicher und Sie richten Ihre JVM-Argumente korrekt ein, liegt möglicherweise ein Problem mit der Speicherfragmentierung vor. Überprüfen Sie den maximalen Java-Speicher unter Windows XP .

Daramasala
quelle
2

Wenn Sie eine 32-Bit-JVM ausführen, hilft es wahrscheinlich, die Heap-Größe auf eine kleinere zu ändern. Sie können dies tun, indem Sie Argumente direkt an Java übergeben oder über Umgebungsvariablen wie die folgenden:

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

Für 64-Bit-JVM sollte ein größerer Heap -Xms512M -Xmx1536Mfunktionieren.

Führen Sie java -versionoder aus java -d32, java--d64damit Java7 überprüft, welche Version Sie ausführen.

h - n
quelle
1

So beheben Sie das Problem: Gehen Sie zu Start-> Systemsteuerung-> System-> Erweitert (Registerkarte) -> Umgebungsvariablen-> Systemvariablen-> Neu: Variablenname: _JAVA_OPTIONS Variablenwert: -Xmx512M

ODER

Ändern Sie den Ameisenruf wie unten gezeigt.

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

Es hat bei mir funktioniert.

Sudhakar
quelle
1

Bei der Initialisierung der VM ist ein Fehler aufgetreten. Es konnte nicht genügend Speicherplatz für den 1572864 KB-Objektheap reserviert werden

Ich habe den Speicherwert in der Datei settings.grade 1536 auf 512 geändert und es hat geholfen

Haris Durrani
quelle
1

Gehen Sie zu Start-> Systemsteuerung-> System-> Erweitert (Registerkarte) -> Umgebungsvariablen-> Systemvariablen-> Neu:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
El mehdi AZROUR
quelle
Wenn Sie dies global festlegen, wird die Heap-Größe begrenzt, die Sie IntelliJ geben können.
user3056052
0

Wenn Sie ein Java-Programm ausführen: - Führen Sie Ihr Programm in einem Terminal mit dem richtigen Befehl für Linux aus. Es lautet 'java -jar myprogram.jar' und fügt -Xms256m -Xmx512m hinzu, zum Beispiel: 'java -jar myprogram.jar Xms256m -Xmx512m '

Wenn Sie ein .sh-Skript (Linux, Mac?) Oder ein .bat-Skript (Windows) ausführen, öffnen Sie das Skript und suchen Sie nach den Java-Optionen, falls vorhanden, und erhöhen Sie den Speicher.

Wenn all dies nicht funktioniert, überprüfen Sie Ihre Prozesse (Strg + Alt + Löschen unter Windows) (ps aux unter Linux / Mac) und beenden Sie die Prozesse, die viel Speicher belegen und für Ihr Betriebssystem nicht erforderlich sind! => Versuchen Sie, Ihr Programm erneut auszuführen.

Fico
quelle
0

In CASSANDRA_HOME / bin / cassandra.bat finden Sie folgende Konfiguration

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

Sie können 2G auf eine kleinere Zahl reduzieren, z. B. 1G oder noch weniger, und es sollte funktionieren.

Wenn Sie unter Unix arbeiten, ändern Sie die SH-Datei entsprechend.

Deepak Singhvi
quelle
0

Ich habe den gleichen Fehler erhalten und er wurde behoben, als ich temporäre Dateien mit% temp% löschte und Eclipse neu startete.

Viswanath Nuggu
quelle
0

Manchmal bezieht es sich auf

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Wenn Sie es auf Folgendes einstellen:

$ sysctl vm.overcommit_memory=0

Es sollte funktionieren.

Kay
quelle
0

Ersetzen Sie -Xmx2Gmit -Xms512Moder einer größeren Speichergröße in cassandra.bat Datei in cassandra ist.

kiran
quelle
0

Öffnen Sie die Datei gradle.properties im Android-Ordner.

Ersetzen Sie diese Zeile:

org.gradle.jvmargs=-Xmx1536M

mit:

org.gradle.jvmargs=-Xmx512m

Erläuterung: Maximales Limit aus Gradle-Dokument:

Wenn in der angeforderten Build-Umgebung keine maximale Heap-Größe angegeben ist, verwendet der Daemon bis zu 512 MB Heap.

Live-Liebe
quelle
-2

Sie müssen nichts weiter tun, als in der POM-Datei wie unten beschrieben zu chnagen

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>
Harish
quelle
2
Wer hat etwas über eine POM-Datei gesagt?
Henley Chiu