J'ai installé JDK 8 et j'essaie de lancer Eclipse. Je reçois le message d'avertissement suivant:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
Quelles sont les raisons pour lesquelles cette option VM est ignorée?
Les raisons pour lesquelles ces arguments ont été ignorés sont que la génération permanente a été supprimée dans HotSpot pour JDK8 en raison des inconvénients suivants
L'espace de génération permanente (PermGen) a été complètement supprimé et est en quelque sorte remplacé par un nouvel espace appelé Metaspace. La suppression de PermGen a évidemment pour conséquence que les arguments de la JVM PermSize et MaxPermSize sont ignorés et vous ne jamais obtenir une erreur Java.lang.OutOfMemoryError: PermGen.
Avantages de MetaSpace
Réglage de métaspace
La taille maximale du méta-espace peut être définie à l'aide de l'indicateur -XX: MaxMetaspaceSize. La valeur par défaut est illimitée, ce qui signifie que seule la mémoire système est la limite. L'indicateur de réglage -XX: MetaspaceSize définit la taille initiale du métaspace. Si vous ne spécifiez pas cet indicateur, le métaspace sera redimensionné de manière dynamique en fonction de la demande de l'application au moment de l'exécution.
Change active d'autres optimisations et fonctionnalités dans le futur
Il y a également une amélioration de la performance GC. Plus de détail
C’est l’une des nouvelles fonctionnalités de Java 8, composant de Propositions d’amélioration JDK 122 :
Supprimez la génération permanente de la machine virtuelle Hotspot et par conséquent la nécessité d'ajuster la taille de la génération permanente.
La liste de tous les PEC qui seront inclus dans Java 8 est disponible à la page page Jalons JDK8 .
L'espace de génération permanente (PermGen) a été complètement supprimé et est en quelque sorte remplacé par un nouvel espace appelé Metaspace. Les conséquences de la suppression de PermGen sont évidemment le fait que les arguments PermSize et MaxPermSize JVM sont ignorés et vous n'obtiendrez jamais un Java.lang.OutOfMemoryError
: Erreur PermGen. La machine virtuelle Java JDK 8 HotSpot utilise maintenant la mémoire native pour la représentation des métadonnées de classe et s'appelle Metaspace. En savoir plus >>
Parce que l'espace PermGen a été supprimé. La gestion de la mémoire a un peu changé.
L'espace PermGen est remplacé par MetaSpace dans Java 8. Les arguments JVM PermSize et MaxPermSize sont ignorés et un avertissement est émis s'il est présent au démarrage.
La plupart des allocations pour les métadonnées de classe sont maintenant allouées en dehors de la mémoire native. * Les classes utilisées pour décrire les métadonnées de classe ont été supprimées.
La principale différence entre l’ancien PermGen et le nouveau MetaSpace est qu’il n’est pas obligatoire de définir la limite supérieure d’utilisation de la mémoire. Vous pouvez garder la limite d'espace MetaSpace non limitée. Ainsi, lorsque l'utilisation de la mémoire augmente, vous n'obtiendrez pas l'erreur OutOfMemoryError. Au lieu de cela, la mémoire native réservée est augmentée pour remplir pleinement l'utilisation accrue de la mémoire.
Vous pouvez définir la limite maximale d’espace pour MetaSpace, puis l’espace OutOfMemoryError: Metadata sera lancé. Il est donc important de définir cette limite avec précaution afin d'éviter les pertes de mémoire.
L'implémentation JVM d'Oracle pour Java 8 a supprimé le modèle PermGen et l'a remplacé par Metaspace .