Ich erhalte folgenden Fehler in eclipse.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.
Kann jemand wissen, wie man dieses Problem beheben kann?
Herzliche Grüße,
Mahendra Athneria
Ich erhalte folgenden Fehler in eclipse.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.
Kann jemand wissen, wie man dieses Problem beheben kann?
Herzliche Grüße,
Mahendra Athneria
Weniger Speicherplatz verwenden.
Es ist schwer zu sagen, was genau das Problem ist, ohne zu wissen, welche Art von Anwendung Sie ausführen. Diese Antwort enthält daher nur allgemeine Ratschläge für den Umgang mit diesem Problem.
を使用します。 jvisualvm
Anwendung, die mit dem JDK geliefert wird. Sie ermöglicht es Ihnen, sich mit einem laufenden Prozess zu verbinden und zu sehen, wie der Speicher verwendet wird.
Suchen Sie in den Ergebnissen nach einer großen Anzahl von Objekten, die dort nicht vorkommen sollten. Wenn Sie sehen, dass es 20.000 Instanzen einer Klasse gibt, rechnen Sie nach, ob es tatsächlich so viele sein sollten. Suchen Sie nach den Objekttypen, die viel mehr Instanzen haben, als sie eigentlich haben sollten. Dann müssen Sie herausfinden, warum es so viele sind.
Diese zusätzlichen Objekte werden wahrscheinlich erstellt und nicht richtig dereferenziert. Möglicherweise legen Sie sie irgendwo in einer Datenstruktur ab und entfernen sie nicht. Möglicherweise haben Sie noch laufende Threads, die auf diese Daten verweisen und nicht ordnungsgemäß beendet werden. Es gibt alle möglichen Gründe, warum Sie weiterhin auf Daten verweisen, die eigentlich in den Garbage Collect gehören.
Die wichtigste Information besteht darin, zu wissen, welche Objektklasse in dieser Menge explodiert. Sobald Sie das wissen, können Sie den Konstruktor und Destruktor dieser Klasse überschreiben, um zu protokollieren, wie viele von ihnen erstellt und zerstört wurden und wo. Indem Sie diese Daten durchgehen, können Sie feststellen, wo die zusätzlichen Objekte erstellt oder wo sie nicht zerstört werden. Sobald Sie dieses Problem behoben haben, wird der Fehler nicht mehr auftreten.
Es ist natürlich auch gut möglich, dass die Daten, die Sie verarbeiten, tatsächlich diese Menge an Speicher benötigen. Sie haben uns nichts über Ihr Projekt erzählt, so dass es unmöglich ist, dies genau zu beurteilen. Wenn dies der Fall ist, müssen Sie herausfinden, wie Sie die Daten partitionieren können, um jeweils nur einen Teil davon zu laden, diesen zu verarbeiten, aus dem Speicher zu entfernen und dann zum nächsten Datenpaket überzugehen.
Ich hatte diese Probleme schon einmal und habe alle oben genannten Techniken angewandt, um sie zu lösen.
Geht eclipse der Speicher aus oder eine Anwendung, die Sie in eclipse ausführen?
Unter der Annahme, dass es sich nicht um ein Speicherleck handelt und Sie einfach mehr Speicher benötigen, können Sie die VM-Argumente ändern, die an eine in Eclipse laufende Anwendung übergeben werden. Ausführungskonfigurationen -> VM-Argumente -> -Xmx512m
Wenn das Problem bei eclipse liegt, können Sie die Einstellungsdatei eclipse.ini bearbeiten und das Argument -Xmx ändern.
Wenn Sie jedoch ein Speicherleck haben, wird die Erhöhung der maximalen Heap-Größe das Problem nur noch ein wenig länger verbergen.
Anstatt zu erzwingen System.gc()
wie @keatch vorschlug, denke ich, dass es besser ist, herauszufinden, was das Speicherleck ist. Es gibt ein Tool jHat
( Java Heap-Analyse-Werkzeug ), die dabei helfen können, die Ursache des Problems herauszufinden.
Aquí ist eine Erklärung, wie man einen Heap Dump macht.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.