CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled

68

Ich habe diese Frage schon einmal gestellt - Was macht das JVM-Flag CMSClassUnloadingEnabled tatsächlich? , aber diesmal ist es etwas anders!

Wenn ich eine Java-VM mit -XX:+CMSPermGenSweepingEnabledgesetztem Flag starte, wird die folgende Meldung gedruckt:

Bitte verwenden Sie in Zukunft CMSClassUnloadingEnabled anstelle von CMSPermGenSweepingEnabled

Das -XX:+CMSPermGenSweepingEnabledFlag wird oft verwendet, um PermGen OutOfMemoryFehler abzumildern. Ich habe jedoch an anderer Stelle gelesen, dass die Leute festgestellt haben, dass sie diese Fehler immer noch hatten, wenn sie den obigen Ratschlägen folgten, aber durch das Festhalten an -XX:+CMSPermGenSweepingEnabledund -XX:+CMSClassUnloadingEnabledihre VM zwischen den Neustarts länger aktiv geblieben sind.

Ersetzt es -XX:+CMSClassUnloadingEnabledwirklich -XX:+CMSPermGenSweepingEnabledoder hat es noch einen Vorteil, beide zu haben?

Danke im Voraus

Rich ps: Ich weiß, dass die Hauptursache für Perm-Probleme normalerweise immer noch Classloader-Lecks sind. Hier geht es mehr um die Nachricht, die die JVM erzeugt, wenn wir die oben genannten Optionen verwenden.

Reich
quelle

Antworten:

77

Nach allem, was ich sagen kann, ist das einzige, was die 1.6 JVM macht CMSPermGenSweepingEnabled, diese Nachricht zu drucken - sie wird nicht so verarbeitet, wie sie in 1.5 ist. Um CMSClassUnloadingEnabledAuswirkungen zu haben, UseConcMarkSweepGCmuss auch eingestellt werden.

kschneid
quelle
1
Danke - haben Sie Links oder andere Möglichkeiten, dies zu sichern?
Rich
28
Laden Sie den JDK-Quellcode (einschließlich Hotspot) herunter und überprüfen Sie ihn hotspot/src/share/vm/runtime/globals.hpp. CMSPermGenSweepingEnabledist in 1,5 vorhanden und in 1,6 nicht vorhanden. Darüber hinaus hotspot/src/share/vm/runtime/arguments.cppenthält die Version 1.6 von neuen Code zum Drucken der Nachricht.
Kschneid
Ok, mit Blick auf den jdk 1.6.23-Quellcode wurde kein Verwendungsort gefunden, außer globals.hpp, wo er nur auf false gesetzt ist. Also wird es wirklich benutzt ??? Entschuldigung, wenn ich den Ort verpasst habe, an dem es verwendet wird.
Zucht
14
-XX: + CMSClassUnloadingEnabled und -XX: + CMSPermGenSweepingEnabled sind in Java 1.7 unbrauchbar, siehe Link
Marko Vranjkovic
8
Laut Oracle (siehe blogs.oracle.com/poonam/entry/… ) gilt die Option -XX:+CMSClassUnloadingEnabledweiterhin für Java 1.7.
Chris B.