2010-09-15 5 views
67

Ich habe diese Frage schon mal gestellt - What does JVM flag CMSClassUnloadingEnabled actually do?, aber diesmal ist es etwas anders!CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled

Wenn ich einen Java-VM mit dem -XX:+CMSPermGenSweepingEnabled Flag gesetzt zu starten, wird die folgende Meldung ausgegeben:

Bitte benutzen Sie CMSClassUnloadingEnabled anstelle von CMSPermGenSweepingEnabled in Zukunft

Die -XX:+CMSPermGenSweepingEnabled Flagge wird häufig verwendet, um gegen PermGen OutOfMemory Fehler zu mildern, jedoch habe ich read elsewhere, die Menschen haben festgestellt, dass durch Befolgen der oben genannten Ratschläge sie immer noch diese Fehler hatten, aber indem Sie mit -XX:+CMSPermGenSweepingEnabled sowiehaftenihre VM ist zwischen Neustarts länger geblieben.

Ersetzt -XX:+CMSClassUnloadingEnabled wirklich -XX:+CMSPermGenSweepingEnabled oder gibt es noch einen Vorteil, wenn Sie beide haben?

Vielen Dank im Voraus

Rich- ps: Ich weiß, dass die Ursache für zul gen Problemen Classloader Lecks immer noch in der Regel ist dies mehr über die Nachricht ist, dass die JVM erzeugt, wenn wir die oben genannten Optionen verwenden.

Antwort

74

Von dem, was ich sagen kann, das einzige, was die 1.6 JVM mit CMSPermGenSweepingEnabled tut, ist diese Nachricht zu drucken - es ist nicht so verarbeitet, wie es in 1.5 ist. Damit CMSClassUnloadingEnabled Auswirkungen haben kann, muss UseConcMarkSweepGC ebenfalls festgelegt werden.

+1

Danke - haben Sie irgendwelche Links oder andere Möglichkeiten, dies zu unterstützen? – Rich

+28

Laden Sie den JDK-Quellcode (einschließlich Hotspot) herunter und inspizieren Sie 'hotspot/src/share/vm/runtime/globals.hpp'. 'CMSPermGenSweepingEnabled' ist in 1.5 vorhanden und in 1.6 nicht vorhanden. Darüber hinaus enthält die Version 1.6 von 'hotspot/src/share/vm/runtime/arguments.cpp' neuen Code zum Drucken der Nachricht. – kschneid

+0

das ist hilfreich – hvgotcodes