J'ai un peu posé cette question auparavant - Que fait réellement le drapeau JVM CMSClassUnloadingEnabled?, mais cette fois c'est légèrement différent!
Si je démarre une machine virtuelle Java avec le drapeau -XX:+CMSPermGenSweepingEnabled
défini, le message suivant est imprimé:
Veuillez utiliser CMSClassUnloadingEnabled à la place de CMSPermGenSweepingEnabled à l'avenir
Le drapeau -XX:+CMSPermGenSweepingEnabled
est souvent utilisé pour atténuer les erreurs PermGen OutOfMemory
, cependant j'ai lu ailleurs que des personnes ont constaté que en suivant le conseil ci-dessus, elles ont toujours rencontré ces erreurs, mais en restant avec -XX:+CMSPermGenSweepingEnabled
ainsi que -XX:+CMSClassUnloadingEnabled
leur VM est restée 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?
Rich ps: Je sais que la cause première des problèmes de mémoire perm est généralement les fuites de Classloader, ceci concerne plus le message produit par la JVM si nous utilisons les options ci-dessus.