web-dev-qa-db-fra.com

CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled

J'ai en quelque sorte posé cette question auparavant - Que fait réellement l'indicateur JVM CMSClassUnloadingEnabled? , mais cette fois, c'est légèrement différent!

Si je démarre un Java VM avec le -XX:+CMSPermGenSweepingEnabled flag set, le message suivant est imprimé:

Veuillez utiliser CMSClassUnloadingEnabled à la place de CMSPermGenSweepingEnabled à l'avenir

Le -XX:+CMSPermGenSweepingEnabled le drapeau est souvent utilisé pour atténuer PermGen OutOfMemory des erreurs, mais j'ai lire ailleurs que les gens ont constaté qu'en suivant les conseils ci-dessus, ils ont toujours eu ces erreurs, mais en s'en tenant à -XX:+CMSPermGenSweepingEnabled aussi bien que -XX:+CMSClassUnloadingEnabled leur VM est resté plus longtemps entre les redémarrages.

Est-ce que -XX:+CMSClassUnloadingEnabled remplace vraiment -XX:+CMSPermGenSweepingEnabled ou y a-t-il encore un avantage à les avoir tous les deux?

Merci d'avance

Rich ps: Je sais que la cause première des problèmes de perm gen est toujours généralement les fuites de Classloader, il s'agit plus du message que la JVM produit si nous utilisons les options ci-dessus.

67
Rich

D'après ce que je peux dire, la seule chose que la JVM 1.6 fait avec CMSPermGenSweepingEnabled est d'imprimer ce message - il n'est pas traité comme il est en 1.5. Pour que CMSClassUnloadingEnabled ait un impact, UseConcMarkSweepGC doit également être défini.

76
kschneid