it-swarm.com.de

Meldung "Unzureichender Speicher für die Java-Laufzeitumgebung" in Eclipse

Wenn ich meinen Java-Code in Eclipse ausführen, erhalte ich die folgende Meldung:

There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (malloc) failed to allocate 4088 bytes for AllocateHeap
An error report file with more information is saved as:
E:\Eclipse_Workspace\BTest\hs_err_pid1888.log

Ich habe 4 GB RAM in meinem Computer. Ich habe auch meine JRE von 1.7 auf 1.8 geändert. Das Problem scheint jedoch nicht gelöst zu sein. Ich verwende ein Win 8-System mit i3-Prozessor und habe ungefähr 20 GB freien Festplattenspeicher in meinem Laufwerk C. 

Eclipse-Version: Eclipse Juno Service Release 2

Ich bekomme diese Meldung auch beim Starten von Eclipse. Ich habe die Fehlermeldung "Screenshot" angehängt.

Was verursacht dieses Problem?

enter image description here

Speicherparameter in der Datei "Eclipse.ini":

-startup
plugins/org.Eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.Eclipse.epp.package.Java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms40m
-Xmx512m

Lösung: Neuinstallation von Eclipse hat das Problem behoben.

27
Balaram26

Die obige Meldung bedeutet, dass auf Ihrem PC so viele Programme ausgeführt werden, dass kein Speicher mehr vorhanden ist. Dies ist kein Java-Problem und keine Java-Option wird dies ändern.

Verwenden Sie den Task-Manager von Windows, um zu sehen, wie viel von Ihren 4 GB RAM tatsächlich free ist. Meine Vermutung ist, dass Sie irgendwo ein Programm haben, das alle Speicher auffrisst. Finde es und töte es.

EDITSie müssen wissen, dass es zwei Arten von Fehlern gibt, die nicht genügend Arbeitsspeicher bieten.

Die erste ist die OutOfMemoryException, die Sie erhalten, wenn Java-Code ausgeführt wird und Java heap nicht groß genug ist. Dies bedeutet, dass Java Code den Java Laufzeit nach Speicher fragt. Sie können diese mit -Xmx... beheben.

Der andere Fehler liegt vor, wenn der Java Laufzeit nicht genügend Speicherplatz zur Verfügung steht. Dies hat nichts mit dem Java-Heap überhaupt zu tun. Dies ist ein Fehler, wenn Java das Betriebssystem nach mehr Speicher fragt und das Betriebssystem sagt: "Entschuldigung, ich habe keine."

Schließen Sie zum Beheben letzterer Anwendungen oder starten Sie einen Neustart (um die Speicherfragmentierung zu bereinigen).

41
Aaron Digulla

So diagnostizieren Sie diesen Fehler auch bei Ausführung des einfachen Befehls:

Java -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# /home2/ericlesc/code/Java/c2/hs_err_pid23944.log

Überprüfen Sie die Menge des freien Speichers, den Sie haben:

free -m
             total       used       free     shared    buffers     cached
Mem:         28119      26643       1475        189       2391      15368
-/+ buffers/cache:       8884      19235
Swap:         5117         34       5083

Überprüfen Sie die maximale Anzahl von Benutzerprozessen und stellen Sie sicher, dass Sie nicht über das Limit hinausgehen:

ulimit -a

ps -ef | wc -l

Für mich war der Grund dafür, dass PHP zu viel Speicher verbraucht hat, der mir auf bluehost zugewiesen wurde, und wie ich das Problem beheben konnte, ohne PHP oder den Server neu zu starten ( Ich kann nicht) war, das Verzeichnis public_html Zu nehmen und es umzubenennen. Geben Sie PHP eine Minute Zeit, um die Änderung anzuzeigen, und benennen Sie sie dann wieder um.

Ein Fehler in der PHP-Engine selbst. Ich habe eine clevere Möglichkeit gefunden, der PHP Engine einen Swift Kick zu geben.

(Update Feb. 2016) (Ich bekomme eine Steigerung der Stimmenzahl, weil die PHP Bluehost-Instanz-Engines den gesamten Speicher reservieren und keinen für die JVM belassen Verteidigung, PHP entwickelt sich zu einer unheiligen Goldberg-Maschine. Bluehost als Dienst ist auf dem Rückzug.

11
Eric Leschinski

Wenn Sie eine virtuelle Maschine (VM) verwenden, weisen Sie Ihrem RAM weitere VM zu und Ihr Problem wird gelöst.

3
AMIT GURBANI

In Ihrem Eclipse-Installationsverzeichnis sollten Sie die Datei Eclipse.ini finden können. Öffnen Sie es und suchen Sie den Abschnitt -vmargs. Passen Sie den Wert von an:

-Xmx1024m

In diesem Beispiel ist es auf 1 GB eingestellt.

1
Harmlezz

Versuchen Sie, Ihre Eclipse.ini mit unten zu ändern

-startup
plugins/org.Eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.Eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms2G
-Xmx3G
-XX:MaxPermSize=2G
-XX:+UseCompressedOops
-XX:+UseParallelGC

Sobald Sie Ihre Eclipse öffnen, können Sie es unten testen

Sieht so aus, als würde Ihre Anwendung mehr Speicher beanspruchen als zugewiesen (Standard). Ich werde zwei Dinge versuchen

  1. Wie von Harmlezz vorgeschlagen, erhöhen Sie Ihre Speicherzuordnung für JVM auf -Xms2g -Xmx2g (Erhöhen Sie bei Bedarf mehr und probieren Sie es aus)

  2. Laden Sie den Eclipse-Speicheranalysator herunter und prüfen Sie, was zu einem Speicherverlust führt OR. Sie können auch JConsole verwenden, um die JVM-Speichernutzung zu sehen, um ein Problem mit dem Anwendungsspeicher zu finden.

1
Mind Peace

Ihre Anwendung (Eclipse) benötigt mehr Speicher, und die JVM weist nicht genug zu. Sie können den von JVM zugewiesenen Speicher erhöhen, indem Sie den Antworten folgen here

0

Sie müssen die Jvm-Verwendungen wie die Anzahl der laufenden Prozesse und die Heap-Zuordnung diagnostizieren. Dafür gibt es viele Möglichkeiten

  • sie können Java jcmd verwenden, um die Anzahl der Objekte, die Größe des Speichers zu überprüfen (für Linux können Sie beispielsweise "/usr/jdk1.8.0_25/bin/jcmd 19628 GC.class_histogram> /tmp/19628_ClassHistogram_1.txt" verwenden, hier 19628 ist die laufende Anwendungsprozess-ID). Sie können leicht überprüfen, ob in Ihrem Code ein starker Verweis vorhanden ist.
0
rab

Wenn Sie sich auf ec2 befinden und mvn build ausführen möchten, verwenden Sie die Option -T, die maven anweist, die Anzahl der Threads beim Build zu verwenden

zB: mvn -T 10 clean package

0
R Karwalkar