wake-up-neo.net

Was macht -XX: MaxPermSize?

Warum sollte es helfen, ein PermGen OutOfMemoryError-Problem zu beheben?

Außerdem Bonuspunkte für eine Antwort, die mich auf die Dokumentation zu JVM-Argumenten hinweist ...

237
Geoff

Im permanenten Bereich werden die von VM verwendeten Klassen, Methoden, internalisierten Zeichenfolgen und ähnlichen Objekte gespeichert und niemals freigegeben (daher der Name).

Dieser Oracle-Artikel beschreibt kurz und bündig die Funktionsweise und Parametrisierung des HotSpot GC und rät Ihnen, diesen Bereich zu erweitern, wenn Sie viele Klassen laden (dies ist normalerweise bei Anwendungsservern und einigen IDE der Fall. wie Eclipse):

Die permanente Generierung hat für die meisten Anwendungen keine nennenswerten Auswirkungen auf die Leistung des Garbage Collectors. Einige Anwendungen generieren und laden jedoch dynamisch viele Klassen. Beispiel: Einige Implementierungen von JSP-Seiten (JavaServer Pages). Für diese Anwendungen ist möglicherweise eine größere permanente Generation erforderlich, um die zusätzlichen Klassen zu speichern. In diesem Fall kann die maximale permanente Generierungsgröße mit der Befehlszeilenoption -XX erhöht werden: MaxPermSize =.

Beachten Sie, dass diese andere Oracle-Dokumentation die anderen HotSpot-Argumente auflistet.

Update: Beginnend mit Java 8 sind sowohl der Permgen Space als auch diese Einstellung weg. Das für geladene Klassen und Methoden verwendete Speichermodell ist unterschiedlich und nicht eingeschränkt (mit Standardeinstellungen). Sie sollten diesen Fehler nicht mehr sehen.

253
Denys Séguret

-XX:PermSize -XX:MaxPermSize werden verwendet, um die Größe für die permanente Generierung festzulegen.

Permanente Generierung: In der permanenten Generierung werden Klassendateien gespeichert. Dies ist das Ergebnis kompilierter Klassen und JSP-Seiten. Wenn dieser Speicherplatz voll ist, wird eine vollständige Garbage Collection ausgelöst. Wenn die vollständige Garbage Collection alte nicht referenzierte Klassen nicht bereinigen kann und kein Platz mehr zum Erweitern des permanenten Speicherbereichs vorhanden ist, wird ein OOME-Fehler (Out-of-Memory Error) ausgegeben und die JVM stürzt ab.

86
stones333

In Java 8 wird dieser Parameter häufig verwendet, um eine Warnmeldung wie die folgende auszudrucken:

Java HotSpot (TM) 64-Bit-Server VM Warnung: Option MaxPermSize = 512m wird ignoriert; Unterstützung wurde in 8.0 entfernt

Der Grund, warum Sie diese Meldung in Java 8 erhalten, ist, dass Permgen durch Metaspace ersetzt wurde, um einige der Nachteile von PermGen zu beheben (wie Sie selbst gesehen haben, besteht einer dieser Nachteile darin, dass es ein behobenes Problem hat Größe).

Zu Ihrer Information: ein Artikel über Metaspace: http://Java-latte.blogspot.in/2014/03/metaspace-in-Java-8.html

45
AndrewBourgeois