„Bei der Initialisierung der VM ist ein Fehler aufgetreten. Es konnte nicht genügend Speicherplatz für den Objekthaufen reserviert werden “mit -Xmx3G

89

Zuallererst habe ich eine Box mit 8 GB RAM, daher bezweifle ich, dass der gesamte Speicher das Problem ist. Diese Anwendung läuft einwandfrei auf Computern mit 6 GB oder weniger.

Ich versuche, 3 GB Speicherplatz mit -Xmx3G unter "VM-Argumente" in Ausführungskonfigurationen in Eclipse zu reservieren.

Jedes Mal, wenn ich versuche, mehr als 1500 MB zu reservieren, wird folgende Fehlermeldung angezeigt: „Bei der Initialisierung der VM ist ein Fehler aufgetreten. Es konnte nicht genügend Speicherplatz für den Objekthaufen reserviert werden “mit -Xmx3G

Was geht hier vor sich?

user1212731
quelle
2
Welche Java-Version hast du? Auf welchem ​​Betriebssystem laufen Sie?
Adam Rofer
Dies war Win7 und ich hatte 3 verschiedene Java-Versionen installiert. Eine davon war die 32-Bit-JRE, die Eclipse verwendete.
Benutzer1212731
3
Vergessen Sie nicht, eine Antwort als richtig zu markieren.
xdhmoore
Ändern Sie einfach die Einstellung in gridle.property mit Ihrem verfügbaren Raum
Bhushan

Antworten:

64

Könnte es sein, dass Sie auf diesem Computer ein 32-Bit-JVM verwenden?

Laurent
quelle
8
Entschuldigung für die dumme Frage, aber wie würde ich das überprüfen? Und wie kann ich 64-Bit verwenden?
user1212731
3
Eigentlich habe ich gerade Java -d64 -version in der Kommandozeile ausprobiert und es kam mit 64-Bit-Server-VM.
Benutzer1212731
6
Anscheinend verwendete Eclipse die 32-Bit-Version von JRE, die ich zuvor installiert hatte, obwohl die 64-Bit-Version die neueste Installation war. Ich habe die Einstellungen unter Einstellungen -> Installierte JREs geändert, um dieses Problem zu beheben. Ich danke Ihnen sehr für Ihre Antwort!
Benutzer1212731
3
Sollte 32 Bit nicht ausreichen, um 4 GB zu adressieren?
Thomas
7
Es sollte sein, aber das löst mein Problem. Keine Gegenstimme für diese Antwort wegen fehlender Erklärung. Dieser Link erklärt, wie ein 32-Bit-JVM nicht über 1 GB maximalen Heap-Speicherplatz gehen kann
Steven
57

So beheben Sie das Problem: Gehen Sie zu 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;  

Ändern Sie dies in Ihren entsprechenden Pfad .

Mohamed Adel
quelle
4
Nur eine Notiz für andere. Sie fügen eine SYSTEM-Variable hinzu, keine USER-Variable. Ich bin in Eclipse auf dieses Problem gestoßen und musste meinen Computer nach den obigen Änderungen nicht neu starten ... Ich musste nur Eclipse neu starten. Vielen Dank!
Captain_Jim1
Für Neugierige gibt das Flag -Xmx in _JAVA_OPTIONS die maximal zulässige Größe des JVM-Heapspeichers an. Dies verhindert, dass JVM unangemessenen Speicherplatz anfordert (insbesondere nicht
zuweisbar
40

Dies ist eigentlich kein Eclipse-spezifisches Problem. Es ist ein allgemeines Java-unter-Windows-Problem. Dies liegt daran, wie die JVM unter Windows Speicher zuweist. Es besteht darauf, einen zusammenhängenden Speicherblock zuzuweisen, den Windows häufig nicht bereitstellen kann, selbst wenn genügend separate Blöcke vorhanden sind, um die Zuweisungsanforderung zu erfüllen. Es gibt Dienstprogramme, die versuchen, Windows dabei zu helfen, seinen Speicher zu "defragmentieren", was theoretisch dieser Situation helfen würde. Aber ich habe sie nicht wirklich ernsthaft ausprobiert und kann daher nicht mit ihrer Wirksamkeit sprechen. Eine Sache, die ich manchmal gehört habe, die helfen könnte, ist, Windows neu zu starten und vor dem Starten anderer Apps die Java-App zu starten, die viel Speicher benötigt. Wenn Sie Glück haben, hat Windows seinen Speicherplatz noch nicht fragmentiert, und Java erhält den zusammenhängenden Block, der angefordert wird.

Irgendwo in den Interwebs gibt es weitere technische Erklärungen und Analysen zu diesem Thema, aber ich habe keine Referenzen zur Hand.

Ich habe dies jedoch gefunden, was hilfreich aussieht: https://stackoverflow.com/a/497757/639520

E-Riz
quelle
2
In meinem Fall scheint Ihre Antwort zu funktionieren. Ich habe Windows nicht neu gestartet, aber ich habe versucht, andere Apps in meinen Fenstern zu schließen und dann Java auszuführen, und es konnte die VM starten.
sttaq
21

Erstens kann die JRE von 32 Bit nicht mehr ~ 1,5 GB RAM verwenden. Wenn Sie also mehr wollen, verwenden Sie eine 64-Bit-JRE.

Zweitens, wenn eine neue JVM gestartet wird, summiert dies die -Xmx-Eigenschaft aller ausgeführten JVM und prüft, ob auf dem System noch genügend Speicher vorhanden ist, um mit ihrem eigenen -Xmx ausgeführt zu werden. Wenn dies nicht ausreicht, tritt der Fehler auf.

Daniel De León
quelle
15

Ich habe Liferay mit dem Tomcat-Server von Eclipse IDE verwendet. Ich hatte den gleichen Fehler beim Klicken auf den Serverstart. Doppelklicken Sie auf den Server von Eclipse. Es öffnet sich die Seite Serverübersicht. Aktualisierte Speicherargumente von -Xmx1024m -XX: MaxPermSize = 256m auf -Xmx512m -XX: MaxPermSize = 256m. Dann hat es bei mir funktioniert.

Prathap
quelle
9

Stellen Sie sicher, dass Eclipse tatsächlich dieselbe JVM ausführt, von der Sie glauben, dass sie ausgeführt wird. Wenn Sie Java jemals in Ihrem Webbrowser verwenden, ist wahrscheinlich auch eine 32-Bit-Version im Umlauf, die möglicherweise Vorrang hat, wenn sie in letzter Zeit installiert oder aktualisiert wird.

Um absolut sicher zu sein, empfehle ich, diese beiden Zeilen oben zu Ihrer eclipse.iniDatei hinzuzufügen :

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

... wo sich auf meinem Computer C:/Java/jdk1.6.0_27/bindie 64-Bit-JVM befindet, die ich kenne. Stellen Sie sicher, dass der binOrdner dort ist.

(Als Bonus können Sie unter Windows 7 auch die Registerkarte "anheften", weshalb ich dies für meinen eigenen Gebrauch tun musste.)

Adam Rofer
quelle
Das Argument -vm sollte auf die ausführbare Java-Datei verweisen, nicht nur auf einen Ordner. Siehe wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz
1
Falsch. Siehe diesen Eclipse-Fehler: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer
Dies war in der Tat das Problem! Eclipse verwendete die 32-Bit-Version von JRE, die ich irgendwann installiert hatte. Vielen Dank für die Antwort und die Führung in die richtige Richtung! Ich schätze es sehr.
Benutzer1212731
@AdamRofer, dieser Fehler ist interessant, aber speziell für Windows 7 und um ein Problem beim Fixieren von Eclipse in der Taskleiste zu umgehen. Im Allgemeinen sollte eclipse.ini auf die ausführbare Java-Datei verweisen, obwohl der Equinox-Launcher insofern intelligent zu sein scheint, als er nach einer ausführbaren Java-Datei sucht, wenn -vm auf einen Ordner verweist (zumindest unter Windows).
E-Riz
@ E-Riz "sollte" ist zu streng für meinen Geschmack :) Hoffentlich beheben sie den Fehler, ohne das vm-Argument irgendwann ändern zu müssen. Hier sind weitere Informationen, die für sie gut wären, um sie auf ihrer eclipse.iniSeite zu aktualisieren : wiki.eclipse.org/…
Adam Rofer
5

Dies ist das Problem der Heap-Größe. Bearbeiten Sie Ihre .bat(Batch-Datei). Möglicherweise wird die Heap-Größe 1024 angezeigt. Ändern Sie sie in 512. Dann sollte es funktionieren.

user1740626
quelle
2

Ich hatte auch das gleiche Problem bei der Verwendung von Eclipse, das 32-Bit und die von ihm verwendete JVM 64-Bit war. Als ich die Eclipse an 32-Bit-JVM weitergeleitet habe, hat es funktioniert

Ajit K'sagar
quelle
2

Setzen Sie einfach das #Symbol org.gradle.jvmargs=-Xmx1536min gradle.properties vor

 # org.gradle.jvmargs=-Xmx1536m
Frau Sonia
quelle
Ich bin mir nicht sicher, wie es funktioniert hat, als ich Kotlin-Multiplattform auf einem Mac ausprobiert habe! trotzdem danke!
Chintan Soni
0

Wahrscheinlich versuchen Sie sowieso falsche Optionen. Ich habe einen ähnlichen Fehler mit dem unterstützenden Fehlerprotokoll erhalten:

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

In meinem Fall unterstützte die Software Java 8 noch nicht (das Skript verwendete alte JVM-Argumente), aber ich hatte standardmäßig Java 8.

Mateva
quelle
0

Einer der Gründe für dieses Problem ist, dass für den Start von Tomcat kein Speicher verfügbar ist. Versuchen Sie, die unerwünschte laufende Software aus Windows zu löschen und Eclipse und Tomcat neu zu starten.

Sooribabu
quelle