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.
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.