587 Stimmen

Wie geht man mit "java.lang.OutOfMemoryError: Java heap space"-Fehler?

Ich schreibe ein clientseitiges Schaukel Anwendung (grafischer Schriftdesigner) auf Java 5 . In letzter Zeit stoße ich auf java.lang.OutOfMemoryError: Java heap space Fehler, weil ich bei der Speichernutzung nicht sparsam bin. Der Benutzer kann eine unbegrenzte Anzahl von Dateien öffnen, und das Programm behält die geöffneten Objekte im Speicher. Nach einer kurzen Recherche fand ich Ergonomie in der virtuellen Java-Maschine 5.0 und andere sagen, dass die JVM auf Windows-Rechnern standardmäßig die maximale Heap-Größe als 64MB .

Wie sollte ich in dieser Situation mit dieser Einschränkung umgehen?

Ich könnte die maximale Heap-Größe mit Kommandozeile Option zu Java, aber dazu müsste man den verfügbaren Arbeitsspeicher ermitteln und ein Startprogramm oder Skript schreiben. Außerdem ist die Erhöhung auf einige Endliche max nicht letztlich das Problem loszuwerden.

Ich könnte einen Teil meines Codes umschreiben, um Objekte häufig im Dateisystem zu persistieren (die Verwendung einer Datenbank ist das Gleiche), um Speicherplatz freizugeben. Es könnte funktionieren, aber es ist wahrscheinlich auch eine Menge Arbeit.

Könnten Sie mir Einzelheiten zu den oben genannten Ideen oder einige Alternativen nennen, z. B. automatischer virtueller Speicher, dynamisches Erweitern der Heap-Größe Das wird großartig sein.

26voto

loveall Punkte 241

VM-Argumente haben bei mir in Eclipse funktioniert. Wenn Sie eclipse Version 3.4 verwenden, gehen Sie wie folgt vor

gehen zu Run --> Run Configurations --> dann das Projekt unter maven build auswählen --> dann den Reiter "JRE" auswählen --> dann eingeben -Xmx1024m .

Alternativ können Sie auch Folgendes tun Run --> Run Configurations --> select the "JRE" tab --> dann eingeben - Xmx1024m

Dies sollte den Speicherheap für alle Builds/Projekte vergrößern. Die obige Speichergröße beträgt 1 GB. Sie können sie nach Belieben optimieren.

25voto

Ravindra babu Punkte 45577

Ich würde gerne Empfehlungen von Oracle hinzufügen Fehlersuche Artikel.

Exception in thread thread_name: java.lang.OutOfMemoryError: Java Heap-Speicher

Die Detailmeldung Java heap space zeigt an, dass ein Objekt nicht im Java-Heap zugeordnet werden konnte. Dieser Fehler impliziert nicht unbedingt ein Speicherleck

Mögliche Ursachen:

  1. Einfaches Konfigurationsproblem , wenn die angegebene Heap-Größe für die Anwendung nicht ausreicht.

  2. Die Anwendung hält unbeabsichtigt Verweise auf Objekte Dadurch wird verhindert, dass die Objekte vom Garbage Collecting erfasst werden.

  3. Übermäßiger Gebrauch von Abschlussmitteln .

Eine weitere potenzielle Fehlerquelle entsteht bei Anwendungen, die übermäßig viele Finalizer verwenden. Wenn eine Klasse eine Finalize-Methode hat, wird der Speicherplatz von Objekten dieses Typs bei der Garbage Collection nicht zurückgewonnen

Nach Müllabfuhr werden die Objekte in die Warteschlange für Fertigstellung , die zu einem späteren Zeitpunkt erfolgt. Endverschlüsse werden von einem Daemon-Thread ausgeführt, der die Finalisierungswarteschlange bedient. Wenn die Abschlussbericht Thread nicht mit der Finalisierungswarteschlange Schritt halten kann, könnte sich der Java-Heap füllen und diese Art von OutOfMemoryError würde eine Ausnahme ausgelöst werden.

Ein Szenario, das zu dieser Situation führen kann, ist, wenn eine Anwendung dringliche Themen die die Ursache für die Fertigstellung Warteschlange mit einer Geschwindigkeit anwachsen, die schneller ist als die Geschwindigkeit, mit der der Finalizer-Thread diese Warteschlange bedient.

19voto

kohlerm Punkte 2576

Ja, mit -Xmx können Sie mehr Speicher für Ihre JVM konfigurieren. Um sicher zu gehen, dass Sie keinen Speicher vergeuden oder verlieren. Machen Sie einen Heap-Dump und verwenden Sie den Eclipse Memory Analyzer um Ihren Speicherverbrauch zu analysieren.

12voto

CodingEra Punkte 463

Fügen Sie den folgenden Code ein Android/gradle.properties :

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true

11voto

Muhammad Raqib Punkte 115

Wenn Sie hierher gekommen sind, um diese Ausgabe von REACT NATIVE zu durchsuchen.

Dann sollten Sie Folgendes tun

cd android/ && ./gradlew clean && cd ..

CodeJaeger.com

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.

Powered by:

X