Die java-Fehlermeldung.lang.OutOfMemoryError: GC overhead limit exceeded
Bekomme ich diese Fehlermeldung wie führe ich meine JUnit-tests:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Ich weiß, was ein OutOfMemoryError
ist, aber was bedeutet GC overhead limit bedeuten? Wie kann ich dieses Problem lösen?
Das klingt sehr interessant. Ich würde gerne, wenn jemand posten könnte einige code, der generiert diese.
Ich habe einfach das problem gefunden, die dazu führten, dass zu viel memory-Nutzung, in der Nähe der Grenze des Heaps. Eine einfache Lösung könnte einfach sein, zu geben mehr Heap-Speicher für die Java-Engine (-Xmx), aber dies hilft nur, wenn die Anwendung braucht genau so viel Speicher, wie die heap-limit, bevor Sie eingestellt wurde.
ich hatte hier eine Antwort überprüfen Sie, ob es hilft, stackoverflow.com/questions/11091516/...
Beachten Sie, dass es mehrere
Wie hast du das Problem lösen??
Ich habe einfach das problem gefunden, die dazu führten, dass zu viel memory-Nutzung, in der Nähe der Grenze des Heaps. Eine einfache Lösung könnte einfach sein, zu geben mehr Heap-Speicher für die Java-Engine (-Xmx), aber dies hilft nur, wenn die Anwendung braucht genau so viel Speicher, wie die heap-limit, bevor Sie eingestellt wurde.
ich hatte hier eine Antwort überprüfen Sie, ob es hilft, stackoverflow.com/questions/11091516/...
Beachten Sie, dass es mehrere
OutOfMemoryError
Szenarien für die Erhöhung der heap nicht eine gültige Lösung: ausführen von nativen threads und läuft aus der perm-gen (die ist getrennt vom heap) sind zwei Beispiele. Seien Sie vorsichtig über die Herstellung übermäßig breiten Aussagen über OutOfMemoryErrors
; es gibt eine überraschend vielfältige Reihe von Dingen, die verursachen können, Sie.Wie hast du das Problem lösen??
InformationsquelleAutor Mnementh | 2009-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Meldung bedeutet, dass für einige Grund, warum der garbage collector ist die Einnahme eine übermäßige Menge an Zeit (standardmäßig 98% der CPU-Zeit des Prozesses) und erholt sich nur sehr wenig Speicher in jeder Ausführung (standardmäßig 2% des Haufens).
Dies bedeutet effektiv, dass Ihr Programm aufhört, jeglichen Fortschritt und ist damit beschäftigt, auf dem nur der garbage collection-zu jeder Zeit.
Um zu verhindern, dass Ihre Anwendung von einweichen bis die CPU-Zeit, ohne sich etwas getan, die JVM wirft diese
Error
so dass Sie die chance haben, bei der Diagnose des Problems.Den seltenen Fällen, wo ich habe gesehen, das geschehen ist, wo einige code erzeugen Tonnen von temporären Objekten und Tonnen von schwach-referenzierte Objekte in einem bereits sehr Speicher-eingeschränkten Umgebung.
Check-out dieser Artikel für details (insbesondere dieses Teil).
Nein, das wäre nicht richtig. Während Sie ihm mehr Arbeitsspeicher könnte reduzieren Sie das problem, Sie sollte auch einen Blick auf den code und sehen Sie, warum es produziert so viel Müll, und warum dein code gleitet knapp unter der "out of memory" - Marke. Es ist oft ein Zeichen von kaputt-code.
Danke, es scheint Oracle nicht wirklich, dass eine gute Daten-migration, brachen Sie den link.
Sie hatte mich an "Danke, es scheint, Oracle ist nicht gut"
wenn mehrere Anwendungen laufen in derselben JVM, dann ja, Sie können sich leicht gegenseitig beeinflussen. Es wird schwer, zu sagen, was man verursacht. Die Trennung der Anwendungen in unterschiedliche JVMs könnte die einfachste Lösung sein.
InformationsquelleAutor Joachim Sauer
GC löst diese Ausnahme aus, wenn zu viel Zeit wird damit verbracht, in die garbage collection für zu wenig zurück, zB. 98% der CPU-Zeit auf GC und weniger als 2% der heap wiederhergestellt ist.
Diese Funktion soll verhindern, dass Anwendungen aus, die für einen längeren Zeitraum während der Herstellung wenig oder gar keine Fortschritte, weil der heap zu klein ist.
Können Sie dies ausschalten mit der Befehlszeile-option
-XX:-UseGCOverheadLimit
Mehr info hier
EDIT: wie jemand aussieht, können Sie jetzt schneller Tippen als ich 🙂
Können Sie mir sagen, den Unterschied zwischen "XX" und "-Xmx"? Ich war in der Lage, es zu deaktivieren mit dem "-Xmx" - option zu.
Antworten auf eine sehr alte Kommentar hier, aber... @Bart Die
-XX:
zu Beginn mehrere Optionen für die Befehlszeile ist ein Kennzeichen der Arten, die angibt, dass diese option sehr VM-spezifischen und instabilen (ohne Vorankündigung geändert werden in zukünftigen Versionen). In jedem Fall, die-XX:-UseGCOverheadLimit
flag erzählt die VM zu deaktivieren, GC overhead limit-Prüfung (eigentlich "ausgeschaltet"), in der Erwägung, dass Ihre-Xmx
Befehl lediglich erhöhte sich der heap. Im letzteren Fall ist der GC overhead-Prüfung war noch ausführen, es klingt wie eine größere heap gelöst GC-Prügel-ProblemeIn meiner Anwendung (Lesen in einem großen Excel-Datei in Talend) dies nicht funktioniert und von anderen Benutzern Erklärung, die ich verstehen, warum. Diese nur deaktiviert, der Fehler aber das problem besteht weiterhin, und Ihre Anwendung wird nur verbringen die meiste Zeit mit dem Umgang mit GC. Unser server hatte viel RAM also habe ich die Vorschläge von Vitalii zur Erhöhung der heap-Größe.
Später werden Sie diese Fehlermeldung erhalten, wenn Ihre Anwendung ist datenintensiv ist, das löschen des Speichers und weichen Daten-Leck ist der beste Weg - erfordert aber etwas Zeit.
InformationsquelleAutor dave
Wenn Sie sicher sind, dass keine memory leaks in Ihrem Programm versuchen:
-Xmx1g
.-XX:+UseConcMarkSweepGC
.Falls erforderlich, die limit check kann deaktiviert werden, indem die option
-XX:-UseGCOverheadLimit
auf der Kommandozeile.InformationsquelleAutor Vitalii Fedorenko
Es ist in der Regel der code. Hier ein einfaches Beispiel:
Verwendung von java 1.6.0_24-b07 Auf einem Windows7 32 bit.
java -Xloggc:gc.log-GarbageCollector
Dann schau bei gc.melden Sie
Zugegeben, dies ist nicht der beste test, oder das beste design, aber wenn Sie mit einer situation, wo Sie keine Wahl haben, aber die Umsetzung einer solchen Schleife oder beim Umgang mit bestehender code, der sich schlecht benimmt, Wahl der Wiederverwendung Objekte, statt neue zu erstellen können, reduzieren Sie die Anzahl der Zeiten, die der garbage collector in die Quere kommt...
InformationsquelleAutor Mike
Ursache für die Fehler
Nach einer garbage collection, wenn die Java-Prozess verbringt mehr als etwa 98% seiner Zeit mit garbage collection und wenn es erholt sich weniger als 2% der heap-und wurde damit weit über die letzten 5 (compile-Zeit-Konstante) aufeinander folgende Müll-Sammlungen, dann eine java.lang.OutOfMemoryError geworfen wird
Abgesehen von der Einstellung der heap-Speicher mit -
Xms1g -Xmx2g
versuchenHaben Sie einen Blick auf einige weitere Fragen betreffend G1GC
Java 7 (JDK 7) Müll-Sammlung und Dokumentation auf dem G1
Java G1 garbage collection in der Produktion
Oracle technetwork Artikel für GC Feintuning
InformationsquelleAutor Ravindra babu
Erhöhen nur die heap-Größe ein wenig von der Einstellung dieser option in
Run → Run Configurations → Arguments → VM arguments
Xms - für minimale Grenze
Xmx - für maximale Grenze
arguments
tab...was sollten wir tun, um dies zu erreichen?sorry @BlazeTama keine Ahnung von android...ich habe nicht versucht, dass noch...
Welches tool ist die Antwort? Das war nicht eine Eclipse-Frage.
Es gibt keine "Bagatellgrenze". -Xms ist die ursprüngliche Größe.
Was ist der max der maximale Grenzwert, der festgelegt werden konnte??
InformationsquelleAutor chopss
Für mich, den folgenden Schritten gearbeitet:
eclipse.ini
DateiÄndern
zu
Starten Sie Eclipse Erneut,
Siehe hier
eclipse.ini-Datei in jdev?
Probleme ungelöst, auch wenn die Konfiguration geändert wurde.
problem noch nicht gelöst. Sie haben / kennen keine andere Weise?
Die OP hat nicht gefragt, eine Eclipse-Frage.
InformationsquelleAutor Sunil Kumar Sahoo
versuchen, diese
öffnen Sie die
build.gradle
DateiInformationsquelleAutor alicanozkara
Folgende für mich gearbeitet. Fügen Sie einfach die folgenden snippet:
Wie konnte Sie auch denken, dies ist eine Lösung auf seine Frage, im Allgemeinen? Sie setzen Ihre heap-Größe zu 4g, die völlig willkürlich in einen gradle-Konfiguration für Android facepalm.
InformationsquelleAutor H.S.H
erhöhen javaMaxHeapsize in deinem build.gradle(Module:app) - Datei
(Fügen Sie diese Zeile in gradle)
InformationsquelleAutor saigopi
Neustart mein MacBook hat das Problem gelöst für mich.
InformationsquelleAutor Thomas
Müssen Sie erhöhen Sie die Größe des Arbeitsspeichers in Jdeveloper gehen setDomainEnv.cmd.
und
InformationsquelleAutor shashi
Arbeite ich in Android Studio und begegnet dieser Fehler beim generieren eines signierten APK für die Freigabe.
Ich war in der Lage zu erstellen und testen Sie ein APK-debug-kein problem, aber sobald ich bauen wollte, ein release-APK, die den build-Prozess laufen würde für Minuten auf Ende und dann schließlich beendet mit dem "java-Fehlermeldung.lang.OutOfMemoryError: GC overhead limit exceeded". Ich erhöhte die heap-Größen für beide die VM und die Android-DEX-compiler, aber das problem blieb.
Endlich, nach vielen Stunden und Tassen des Kaffee-es stellte sich heraus, dass das problem war in meinem app-Ebene " zu bauen.gradle " - Datei - ich hatte die 'minifyEnabled' - parameter für den release build type set to 'false', folglich läuft Proguard Stoffe auf code, der bisher nicht durch die code-schrumpfen " - Prozess (siehe https://developer.android.com/studio/build/shrink-code.html).
Ich habe die 'minifyEnabled' parameter auf 'true' und dem release-build ausgeführt wie ein Traum 🙂
Kurz gesagt, ich musste meine app-Ebene " zu bauen.gradle " - Datei aus:
//...
zu
InformationsquelleAutor Alex Ivan Howard
Erhöhen heap-Größe in IntelliJ IDEA Folgen Sie den folgenden Anweisungen. Es funktionierte für mich.
Für Windows-Benutzer,
Gehen Sie zu dem Speicherort, in dem die IDE installiert ist, und suchen Sie nach folgenden.
Bearbeiten die Datei und fügen Sie die folgende.
Das ist es !!
InformationsquelleAutor Dulith De Costa
Netbeans, kann es hilfreich sein design ein max-heap-Größe. Gehen Sie zu Laufen => Set Project Configuration => Anpassen. In der Laufen seiner knallte-up-Fenster, gehen Sie zu VM-Option, füllen Sie
-Xms2048m -Xmx2048m
. Es lösen könnte heap-Größe-problem.InformationsquelleAutor Xiaogang