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:+CMSPermGenSweepingEnabled
gesetztem Flag starte, wird die folgende Meldung gedruckt:
Bitte verwenden Sie in Zukunft CMSClassUnloadingEnabled anstelle von CMSPermGenSweepingEnabled
Das -XX:+CMSPermGenSweepingEnabled
Flag wird oft verwendet, um PermGen OutOfMemory
Fehler 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:+CMSPermGenSweepingEnabled
und -XX:+CMSClassUnloadingEnabled
ihre VM zwischen den Neustarts länger aktiv geblieben sind.
Ersetzt es -XX:+CMSClassUnloadingEnabled
wirklich -XX:+CMSPermGenSweepingEnabled
oder 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.
quelle
hotspot/src/share/vm/runtime/globals.hpp
.CMSPermGenSweepingEnabled
ist in 1,5 vorhanden und in 1,6 nicht vorhanden. Darüber hinaushotspot/src/share/vm/runtime/arguments.cpp
enthält die Version 1.6 von neuen Code zum Drucken der Nachricht.-XX:+CMSClassUnloadingEnabled
weiterhin für Java 1.7.