java.lang.OutOfMemoryError: Java-Heap-Speicherplatz

Lesezeit: 6 Minuten

javalangOutOfMemoryError Java Heap Speicherplatz
Yatendra

Ich erhalte die folgende Fehlermeldung bei der Ausführung eines Multi-Threading-Programms

java.lang.OutOfMemoryError: Java heap space

Der obige Fehler ist in einem der Threads aufgetreten.

  1. Nach meinem Wissen wird der Heap-Speicherplatz nur von Instanzvariablen belegt. Wenn dies korrekt ist, warum ist dieser Fehler dann aufgetreten, nachdem er einige Zeit einwandfrei gelaufen ist, da Speicherplatz für Instanzvariablen zum Zeitpunkt der Objekterstellung zugewiesen wird.

  2. Gibt es eine Möglichkeit, den Speicherplatz zu vergrößern?

  3. Welche Änderungen sollte ich an meinem Programm vornehmen, damit es weniger Heap-Speicher belegt?

  • Überprüfen Sie stackoverflow.com/questions/37335/…

    – JuanZe

    20. Oktober 2009 um 17:07 Uhr

javalangOutOfMemoryError Java Heap Speicherplatz
Thomas Owens

Wenn Sie Ihren Heap-Platz vergrößern möchten, können Sie verwenden java -Xms<initial heap size> -Xmx<maximum heap size> auf der Kommandozeile. Standardmäßig basieren die Werte auf der JRE-Version und der Systemkonfiguration. Du kannst herausfinden mehr über die VM-Optionen auf der Java-Website.

Ich würde jedoch empfehlen, Ihre Anwendung zu profilieren, um herauszufinden, warum Ihre Heap-Größe gegessen wird. NetBeans hat eine sehr guter Profiler mit dabei. Ich glaube, es nutzt die jvisualvm unter der Haube. Mit einem Profiler können Sie versuchen herauszufinden, wo viele Objekte erstellt werden, wann Objekte von der Garbage Collection erfasst werden und vieles mehr.

  • Ich verwende Netbeans, aber ich weiß nicht, wie man den Profiler verwendet. Ich würde gerne mehr über den Profiler erfahren, damit ich damit Speicherlecks in meiner Anwendung finden kann.

    – Yatendra

    20. Oktober 2009 um 18:00 Uhr

  • Ich habe einen Link zu einer Seite auf der NetBeans-Site hinzugefügt (profiler.netbeans.org), das eine sehr gute Dokumentation über das Profil enthält, von den Grundlagen bis hin zur fortgeschritteneren Verwendung.

    – Thomas Owens

    20. Oktober 2009 um 18:03 Uhr

  • Standardwerte ändern sich mit Java-Versionen, es wäre schön, diese Informationen in Ihre Antwort aufzunehmen.

    – Dariusz

    6. Mai 2016 um 8:07 Uhr

  • Gerade ein ähnliches Problem behoben und zuerst versucht: java -jar division.jar -Xmx512m -Xms512m – das gibt mir den gleichen Fehler, aber wenn ich es so mache: java -Xmx512m -Xms512m -jar division.jar – alles ist in Ordnung. Daher ist auch die Reihenfolge der Parameter wichtig.

    – hipokito

    21. Mai 2016 um 12:15 Uhr

  • @hipokito Argumente nach der JAR-Datei werden als Argumente an die Methode main() der JAR-Datei übergeben[]

    – Asu

    11. April 2017 um 15:09 Uhr

javalangOutOfMemoryError Java Heap Speicherplatz
OscarRyz

1.- Ja, aber es bezieht sich ziemlich genau auf den gesamten Speicher, der von Ihrem Programm verwendet wird.

2.- Ja, siehe Java-VM-Optionen

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size

Dh

java -Xmx2g Weisen Sie Ihrer App maximal 2 Gigabyte RAM zu

Aber Sie sollten zuerst sehen, ob Sie kein Speicherleck haben.

3.- Es hängt vom Programm ab. Versuchen Sie es mit Speicherlecks. Diese Frage wäre zu schwer zu beantworten. In letzter Zeit können Sie mit JConsole ein Profil erstellen, um herauszufinden, wo Ihr Gedächtnis hingeht

1646265429 726 javalangOutOfMemoryError Java Heap Speicherplatz
Jakob Schwarz

Vielleicht möchten Sie sich diese Website ansehen, um mehr über den Speicher in der JVM zu erfahren:
http://developer.streamezzo.com/content/learn/articles/optimization-heap-memory-usage

Ich habe es als nützlich empfunden visualgc um zu beobachten, wie sich die verschiedenen Teile des Speichermodells füllen, um zu bestimmen, was zu ändern ist.

Es ist schwierig festzustellen, welcher Teil des Speichers voll war, daher visualgc, da Sie vielleicht nur den Teil ändern möchten, der ein Problem hat, anstatt nur zu sagen:

Bußgeld! Ich werde der JVM 1 GB RAM geben.

Versuchen Sie, genauer zu sein, was Sie tun, auf lange Sicht werden Sie das Programm wahrscheinlich besser dafür finden.

Um festzustellen, wo das Speicherleck sein könnte, können Sie Komponententests dafür verwenden, indem Sie testen, was der Speicher vor und nach dem Test war, und wenn es eine zu große Änderung gibt, möchten Sie es vielleicht untersuchen, aber Sie müssen es Führen Sie die Überprüfung durch, während Ihr Test noch läuft.

1646265429 956 javalangOutOfMemoryError Java Heap Speicherplatz
Benutzer2663609

Sie können Ihre Heap-Speichergröße durch das folgende Programm erhalten.

public class GetHeapSize {
    public static void main(String[] args) {
        long heapsize = Runtime.getRuntime().totalMemory();
        System.out.println("heapsize is :: " + heapsize);
    }
} 

dann können Sie die Heap-Größe auch entsprechend erhöhen, indem Sie Folgendes verwenden: java -Xmx2g
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

1646265430 953 javalangOutOfMemoryError Java Heap Speicherplatz
Adamski

Um die Heap-Größe zu erhöhen, können Sie beim Starten von Java das Argument -Xmx verwenden; z.B

-Xmx256M

1646265430 763 javalangOutOfMemoryError Java Heap Speicherplatz
Gemeinschaft

  1. Nach meinem Wissen wird der Heap-Speicherplatz nur von Instanzvariablen belegt. Wenn dies korrekt ist, warum ist dieser Fehler dann aufgetreten, nachdem er einige Zeit einwandfrei gelaufen ist, da Speicherplatz für Instanzvariablen zum Zeitpunkt der Objekterstellung zugewiesen wird.

Das bedeutet, dass Sie über einen bestimmten Zeitraum kontinuierlich mehr Objekte in Ihrer Anwendung erstellen. Neue Objekte werden im Heap-Speicher gespeichert, und das ist der Grund für das Wachstum des Heap-Speichers.

Heap enthält nicht nur Instanzvariablen. Es speichert alle nicht primitiven Datentypen (Objekte). Die Lebensdauer dieser Objekte kann kurz (Methodenblock) oder lang sein (bis das Objekt in Ihrer Anwendung referenziert wird).

  1. Gibt es eine Möglichkeit, den Speicherplatz zu vergrößern?

Jawohl. Schauen Sie sich dieses Orakel an Artikel für mehr Details.

Es gibt zwei Parameter zum Einstellen der Heap-Größe:

-Xms:die die anfängliche und minimale Heap-Größe festlegt

-Xmx:wodurch die maximale Heap-Größe festgelegt wird

  1. Welche Änderungen sollte ich an meinem Programm vornehmen, damit es weniger Heap-Speicher belegt?

Es hängt von Ihrer Anwendung ab.

  1. Legen Sie den maximalen Heap-Speicher gemäß Ihren Anwendungsanforderungen fest

  2. Verursachen Sie keine Speicherlecks in Ihrer Anwendung

  3. Wenn Sie Speicherlecks in Ihrer Anwendung finden, finden Sie die Ursache mit Hilfe von Profiling-Tools wie z MATTE, Visuelle VM , jconsole usw. Sobald Sie die Ursache gefunden haben, beheben Sie die Lecks.

Wichtige Hinweise von Orakel Artikel

Ursache: Die Detailmeldung Java-Heap-Speicherplatz weist darauf hin, dass das Objekt im Java-Heap nicht zugeordnet werden konnte. Dieser Fehler weist nicht unbedingt auf einen Speicherverlust hin.

Mögliche Gründe:

  1. Falsche Konfiguration (nicht genügend Arbeitsspeicher zuweisen)
  2. Die Anwendung enthält unbeabsichtigt Verweise auf Objekte, wodurch verhindert wird, dass die Objekte von der Garbage Collection erfasst werden
  3. Anwendungen, die Finalizer übermäßig verwenden. Wenn eine Klasse über eine Finalize-Methode verfügt, wird der Speicherplatz von Objekten dieses Typs nicht zum Zeitpunkt der Garbage-Collection zurückgewonnen. Wenn der Finalizer-Thread mit der Finalisierungswarteschlange nicht Schritt halten kann, könnte sich der Java-Heap füllen und diese Art von OutOfMemoryError-Ausnahme würde ausgelöst werden.

Verwenden Sie in einem anderen Hinweis bessere Garbage-Collection-Algorithmen ( CMS oder G1GC)

Sehen Sie sich diese Frage an, um G1GC zu verstehen

1646265431 541 javalangOutOfMemoryError Java Heap Speicherplatz
DKSRathore

  1. In den meisten Fällen ist der Code nicht optimiert. Geben Sie die Objekte frei, die Ihrer Meinung nach nicht mehr benötigt werden. Vermeiden Sie jedes Mal die Erstellung von Objekten in Ihrer Schleife. Versuchen Sie, Caches zu verwenden. Ich weiß nicht, wie deine Bewerbung läuft. Aber auch beim Programmieren gilt eine Regel des normalen Lebens

    Vorbeugung ist besser als Heilung. “Keine unnötigen Objekte erstellen”

917470cookie-checkjava.lang.OutOfMemoryError: Java-Heap-Speicherplatz

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy