Une proposition d’extension du ZGC (Z Garbage Collector) évoquée par la communauté Java pourrait améliorer les performances des applications. Selon les développeurs de Java, en maintenant des générations distinctes pour les objets jeunes et anciens, le ramasse-miette ZGC pourrait collecter plus fréquemment les objets jeunes, qui ont tendance à mourir jeunes. Parmi les objectifs spécifiques de la proposition d'amélioration OpenJDK Java Enhancement Proposal (JEP) du ZGC générationnel, les développeurs mettent en avant la réduction des risques de blocage de l'allocation, la réduction de la charge de la mémoire de tas requise et la réduction de la charge CPU du Garbage Collector. Selon la proposition, ces avantages devraient être obtenus sans réduction significative du débit par rapport au ZGC non générationnel.
Conçu pour l'évolutivité et la faible latence, le ZGC est disponible en version de production depuis le kit de développement Java (JDK) 15 livré en septembre 2020. Avec le Z Garbage Collector, la plupart des tâches sont effectuées quand les threads de l'application sont en cours d'exécution. Les temps de pause du ZGC se mesurent en microsecondes, alors que les temps de pause pour le ramasse-miette G1 par défaut varient de quelques millisecondes à quelques secondes. Ainsi, selon la proposition, pour de nombreuses charges de travail, ZGC peut résoudre les problèmes de latence liés à la récupération de mémoire.
Pas encore de ciblage d'une version Java spécifique
Le ZGC fonctionne bien quand les ressources sont suffisantes. Mais comme le ZGC stocke tous les objets ensemble, quel que soit leur âge, il doit collecter tous les objets à chaque fois qu'il s'exécute. Étant donné que les jeunes objets ont tendance à mourir jeunes, tandis que les objets plus anciens ont tendance à rester en place (selon l'hypothèse générationnelle faible), la collecte des jeunes objets nécessite moins de ressources et libère plus de mémoire, tandis que la collecte des vieux objets nécessite plus de ressources et libère moins de mémoire. Pour l’instant, le ZGC générationnel ne cible aucune version spécifique de Java standard. La version actuelle, JDK 20, est arrivée il y a une semaine et la prochaine version, JDK 21, est prévue pour septembre. La version standard de Java est publiée tous les six mois.