AccueilActualités informatiqueMachine virtuelle Java : GraalVM 21.3 s'appuie sur Java 17 et retisse...

Machine virtuelle Java : GraalVM 21.3 s’appuie sur Java 17 et retisse les boucles

Oracle a publié la mise à jour trimestrielle 21.3 de la GraalVM. L’implémentation de la machine virtuelle Java (JVM) fonctionne avec la dernière version 17 de Java. Le compilateur a quelques optimisations de performance pour le compilateur embarqué. En outre, il devrait être possible de créer des images natives plus rapidement.

La connexion à Java 17 était attendue, car la version publiée en septembre est la première à bénéficier du support à long terme (LTS) depuis Java 11. GraalVM continue de travailler avec ce dernier. Pour la variante entreprise, il existe une version supplémentaire basée sur Java 8, mais l’édition communautaire de GraalVM repose uniquement sur OpenJDK 11 ou 17.

Sommaire

Le compilateur est livré avec certaines optimisations pour les boucles dans la variante Enterprise. Il permet notamment de traiter les boucles dites non comptées, c’est-à-dire les boucles sans compteurs fixes telles que while-blocs, il propose par défaut le strip mining, une technique permettant d’imbriquer une grande boucle en plusieurs bandes plus petites. En outre, il propose des optimisations pour les boucles dont la condition finale est une comparaison avec l’opérateur d’inégalité. != comme

for (int i = start; i != end; i++){ ... }

En outre, le compilateur fournit une vérification plus approfondie pour détecter les segments de code inaccessibles, comme dans l’exemple de code suivant tiré des notes de mise à jour :

class A { ... }
class B extends A { ... }

if (x > 5) {
  if (y instanceof A) {
    throw Error();
  }
}
loop {
  int foo = <expensive computation>;
  if (x > 10) {
    if (y instanceof B) {
      bar(foo);
    }
  }
}

Que l’appel à bar(foo) n’est jamais atteint n’est qu’apparent au second coup d’œil. La condition directe est que x est supérieure à 10 et y est une instance de la classe B. Toutefois, si ces conditions sont remplies, la limite supérieure de l’indice de la throw Error();puisque dans ce cas x également supérieur à 5 et y une instance de A est : La classe B est une extension de la classe A.

Contrairement aux versions précédentes, GraalVM 21.3 reconnaît le contexte et supprime à la fois l’appel à bar(foo) ainsi que le calcul de la valeur de la variable fooqui est utilisé exclusivement comme paramètre de l’appel maintenant superflu dans le code.

Cette version apporte également quelques innovations pour les images natives, que GraalVM propose comme alternative à l’exécution du bytecode dans la JVM classique. À cette fin, un compilateur « ahead-of-time » (AOT) crée des fichiers exécutables indépendamment qui contiennent les classes traduites de l’application réelle, les classes de la bibliothèque d’exécution et les dépendances ainsi que le code lié statiquement du JDK.

La configuration est étendue dans la version 21.3 et permet de prendre en compte la réflexion, la JNI (Java Native Interface), les ressources de chemin de classe et les objets proxy dynamiques, les conditions d’accessibilité des classes par le biais de "condition" : { "typeReachable" .. } pour la réflexion, les ressources JNI (Java Native Interface) et les objets proxy dynamiques. Dans ce cas, le compilateur n’inclut les passages suivants que si le passage de code correspondant peut être atteint par un autre code. Cette procédure réduit potentiellement la taille de l’image native.

Il est évident que la réduction du temps de construction et l’allégement des images compilées figurent en bonne place sur la liste des souhaits des utilisateurs de GraalVM. La version actuelle énumère les points de référence pour la compilation de l’application d’exemple Spring PetClinic, où sur un ordinateur portable AMD64 avec Linux et JDK 11, le temps de construction est passé de 163 secondes à 133 secondes et la taille de l’image de 133 MByte à 119 MByte par rapport à la version 21.2.

D’autres innovations, entre autres dans l’interaction avec WebAssembly, peuvent être trouvées dans les notes de version. Le GraalVM est disponible à la fois en version entreprise et en édition communautaire. Pour ce dernier, des binaires pour Linux, Windows et macOS basés sur Java 17 et Java 11 peuvent être trouvés dans le dépôt GitHub.

Plus d'articles