28/07/2015

G1 : le ramasse-miettes de la prochaine machine virtuelle du JDK 9

Oracle annonce le remplacement de parallel GC par Garbage-First dans la prochaine machine virtuelle de l’environnement de développement Java 9.

Le garbage collector, le meilleur ami du développeur (et parfois aussi son meilleur ennemi) est une des aides au développement les plus intéressantes mises en place à la naissance du langage Java. Pour rappel ce mécanisme permet de nettoyer automatiquement tous les objets non référencés par une application.

La machine virtuelle Java dispose de Parallel GC pour officier comme ramasse-miettes jusqu’à présent, mais cette fonctionnalité vient d’être remplacée par Garbage-First (G1) qui sera donc le ramasse-miettes par défaut dans la prochaine machine virtuelle de l’environnement de développement Java 9.

Parallel GC souffre en fait de quelques insuffisances, notamment à cause du parallélisme mis en place pour gagner en performance. La mise en place du mécanisme impose des temps de synchronisation importants (plusieurs secondes) pour effectuer un nettoyage des piles en cours, ce qui peut-être particulièrement handicapant pour des applications serveurs. G1 propose en revanche des paramétrages minimisant les temps de latence.

La décision de remplacer Parallel GC semble avoir néanmoins créée quelques remous dans la communauté des développeurs Java, certains préférant le ramasse-miettes CMS. Dès lors, Kirk Pepperdin, guru de l’optimisation des performances a proposé une solution intermédiaire : ceux qui souhaiteront utiliser CMS ou Parallel GC pourront le faire en spécifiant avec des lignes de commande le collector sur lequel ils ont porté leur dévolu. Ceux qui souhaiteront utiliser G1 dans Java 9 n’auront aucune modification à faire.

Oracle précise que«la modification est basée sur l’hypothèse que la limitation de latence est souvent plus importante que de maximiser le débit. Si cette hypothèse est incorrecte alors ce changement pourrait avoir besoin d’être reconsidéré». Ainsi, si G1 connait des problèmes critiques qui n’arrivent pas à être résolus à temps, Parallel GC pourrait devenir le ramasse-miettes par défaut à la sortie de JDK 9.

Source: openjdk.java.net

Actualités