Disposition de la mémoire JDK 8 et collecte des ordures
D'après ce que je sais, à partir de JDK 8, le PermGen sera une page dans l'histoire de java. Tout est agréable et joyeux... mais à quoi ressemblera la nouvelle disposition de la mémoire? Cela affectera-t-il le GC sur la nouvelle plateforme?
2 answers
PermGen est remplacé par Metaspace dans Oracle/Sun JDK8, ce qui est très similaire. La principale différence est que Metaspace peut se développer au moment de l'exécution.
C'est quand PermGen est là
Après l'introduction du métaspace
Définitivement, il y a beaucoup d'amélioration dans GC en Java 8. Vous pouvez vérifier ceci stackoverflow post
Dans Metaspace, plusieurs espaces de mémoire virtuelle mappés sont alloués aux métadonnées et l'allocation ( en morceaux) est par chargeur de classe en fonction du type de chargeur de classe et de sa durée de vie . Les morceaux sont renvoyés à la liste des morceaux libres et également aux espaces de mémoire virtuelle retournés lorsque vide.
L'avantage de GC serait
- Pendant la collecte complète, les métadonnées vers les pointeurs de métadonnées ne sont pas analysées
- Beaucoup de code complexe (en particulier pour CMS) pour l'analyse des métadonnées a été supprimé.
- Metaspace contient peu de pointeurs dans le tas Java.
- Aucun coût de compactage pour les métadonnées
- Réduit l'analyse racine (pas d'analyse du dictionnaire VM des classes chargées et d'autres tables de hachage internes).