2014-04-02 2 views
22

Wenn ich meinen Java-Code in Eclipse ausführen, bekomme ich die folgende Meldung:"nicht genügend Speicher für das Java Runtime Environment" -Meldung in Eclipse

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 

I 4GB RAM in meinem Computer. Ich habe meine JRE von 1,7 auf 1,8 geändert. Aber das Problem scheint ungelöst. Ich benutze ein Win 8 System mit i3 Prozessor und habe ungefähr 20 GB freien Speicherplatz in meinem C Drive.

Eclipse-Version Eclipse Juno Service Release 2

Ich habe auch diese Meldung während Eclipse-Start. Ich habe den Screenshot der Fehlermeldung angehängt.

Was verursacht dieses Problem?

enter image description here

Speicherparameter in "eclipse.ini" file:

-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 

Auflösung: Re-Installation von Eclipse das Problem behoben.

+0

ist dies nur geschehen, wenn Sie Eclipse verwenden? – Baby

+1

Haben Sie versucht, Ihre Eclipse-jvm-Eigenschaften in ** eclipse.ini ** (in Ihrem Eclipse-Ordner) zu bearbeiten, um mehr Speicherplatz für Eclipse zu reservieren? – Remi878

+0

Das Erhöhen des virtuellen Speichers kann das Problem lösen. Möglicherweise ist Ihr System von Viren betroffen. !! – Dileep

Antwort

1

In Ihrem Eclipse Installationsverzeichnis sollten Sie in der Lage sein, die Datei eclipse.ini zu finden. Öffne es und finde den Abschnitt -vmargs. Passen Sie den Wert von:

-Xmx1024m 

In diesem Beispiel ist es auf 1 GB festgelegt.

+0

Dadurch wird nur der Heap erhöht. Es wird möglicherweise keine Auswirkungen auf Windows in irgendeiner Weise. !! – Dileep

+0

Auch dies wird nicht empfohlen. –

+0

Danke für die Antwort. Aber nachdem ich es auch geändert habe, bekomme ich die gleiche Nachricht. – Balaram26

0

Ihre Anwendung (Eclipse) braucht mehr Speicher und JVM ist die Zuteilung nicht enough.You die Größe des Speichers erhöhen oben, indem Sie die gegebenen Antworten here

34

Die Nachricht bedeutet JVM ordnet, dass Sie so viele Programme laufen lassen auf Ihrem PC, dass kein Speicher mehr verfügbar 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 Ihrem 4GB RAM ist eigentlich frei. Meine Vermutung ist, dass Sie irgendwo ein Programm haben, das die gesamte Erinnerung auffrisst. Finde es und töte es.

EDIT Sie müssen verstehen, dass es zwei Arten von "out of memory" -Fehler.

Die erste ist die OutOfMemoryException, die Sie erhalten, wenn Java-Code ausgeführt wird und der Java Heap nicht groß genug ist. Das bedeutet Java Code fragt die Java Laufzeit für Speicher. Sie können diese beheben mit -Xmx...

Der andere Fehler ist, wenn die Java-Laufzeit läuft aus dem Speicher. Dies steht nicht im Zusammenhang mit dem Java-Heap überhaupt. Dies ist ein Fehler, wenn Java das Betriebssystem nach mehr Speicher fragt und das Betriebssystem sagt: "Entschuldigung, ich habe keine."

Um das letztere zu beheben, schließen Sie die Anwendungen oder starten Sie das System neu (um die Speicherfragmentierung zu bereinigen).

+3

aber das erklärt nicht, warum die obige Nachricht nur bei Verwendung von Eclipse erscheint, denke ich – Baby

+1

@RafaEl: Die obige Fehlermeldung wird nicht von Eclipse selbst gedruckt. Der erste Fehler stammt von einem Komponententest ** innerhalb von ** Eclipse (Eclipse könnte also den ganzen Speicher verbrauchen) und der zweite ist von Windows *, bevor * Eclipse überhaupt gestartet werden kann. –

+0

vielleicht sind Sie richtig, aber wie OP in comment _ sagte "wenn ich begann Netbeans, ich finde keine solche Nachricht" _ die, soweit ich weiß, erfordern Netbeans mehr Speicher (etwa '400mb') im Vergleich zu Eclipse ('200mb') – Baby

1

Versuchen Sie, Ihre eclipse.ini mit modifizieren unter

-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 Sie mehr Speicher unter

Sieht aus wie Ihre Anwendung verbraucht als zugeteilt (Default) versuchen. Ich werde versuchen, zwei Dinge

  1. Wie Harmlezz vorgeschlagen, um Ihre Speicherzuweisung erhöhen -Xms2g -Xmx2g JVM (Wenn es mehr benötigt erhöhen und probieren Sie es aus)

  2. Herunterladen Eclipse Memory Analyzer und überprüfen was zu einem Speicherverlust führt ODER Sie können JConsole verwenden, um die JVM-Speicherauslastung anzuzeigen, um Probleme mit dem Anwendungsspeicherleck zu erkennen.

+0

Wenn Vorschlag 1 nicht funktioniert, sollten Sie Permutation und Kombination für Java-Hotspots versuchen http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html –

+0

Danke für die Antwort. Aber wie ich in meinem Update gesagt habe, habe ich eine neue Kopie von Eclipse (Kepler) heruntergeladen und die scala plugins installiert, dann meine Anwendung kompiliert, es wurde keine Fehlermeldung irgendeiner Art angezeigt. Also ich denke, basierend darauf kann der Fehler nicht in meiner Speicherzuordnung oder mit meiner JVM sein. – Balaram26

6

Wie dieser Fehler selbst diagnostizieren, wenn die einfachen Befehl ausführen:

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 Größe des freien Speichers 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 

die maximale Anzahl von Benutzerprozessen prüfen Stellen Sie sicher, dass Sie nicht über dem Limit sind:

ulimit -a 

ps -ef | wc -l 

Für mich ist der Grund, warum dies passiert ist, weil PHP zu viel Speicher zu mir auf Bluehost zugeordnet konsumiert hatte, und die Art, wie ich war in der Lage, es zu beheben, ohne PHP neu zu starten oder den Server (ich kann nicht) war das nehmen public_html Verzeichnis und benennen Sie es um. Und geben Sie PHP eine Minute, um die Änderung zu sehen, und benennen Sie sie dann um.

Ein Fehler in der PHP-Engine selbst. Ich fand einen cleveren Weg, der PHP-Engine einen schnellen Kick zu geben.

(Update Februar 2016) (Ich bin eine Spitze von up-Stimmen auf das bekommen, weil Bluehost Beispiel PHP-Motoren für die JVM der gesamten Speicher und lassen keine sind reserviert. In ihrer Verteidigung, entwickelt sich PHP in eine unheilige Rube Goldberg Maschine. Bluehost als Dienst auf dem Rückzug ist.

0

Wenn Sie auf EC2 und wollte mvn tun bauen dann Option -T verwenden, die maven Anzahl von Threads zu verwenden, sagt während bauen tun

zB : mvn -T 10 clean package

1

Wenn Sie Virtual Machine verwenden (VM), weisen Sie Ihrer VM mehr RAM zu und Ihr Problem wird gelöst.

0

Sie müssen die jvm-Verwendungen wie die Anzahl der ausgeführten Prozesse und die Heap-Zuweisung diagnostizieren. es gibt viele Möglichkeiten, dass

zum Beispiel tun
  • Sie java jcmd Anzahl von Objekt zu überprüfen, Größe des Speichers (für Linux verwenden, können Sie beispielsweise verwenden können „/usr/jdk1.8.0_25/bin/ jcmd 19628 GC.class_histogram> /tmp/19628_ClassHistogram_1.txt ", hier ist 19628 die laufende Anwendungsprozess-ID. Sie können leicht überprüfen, ob eine starke Referenz in Ihrem Code oder sonst existiert.
Verwandte Themen