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?



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.


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

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.


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.


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.


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

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"

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.


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.


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.


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


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

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.


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.



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.


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.


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


1

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

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

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.


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.


0

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


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.


0

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


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.


-2

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

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

2
Wer hat etwas über eine POM-Datei gesagt?
Henley Chiu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.