Oracle Labs a publié GraalVM 21.3, prenant en charge Java 17 et le JDK Flight Recorder (JFR) pour le profilage en production des exécutables Java natifs avec un faible overhead. Par rapport à la version 21.1 d'avril 2021, cette version crée des exécutables natifs 14 % plus petits pour Spring PetClinic JDBC avec 20 % de temps de construction en moins. La version exécute les applications plus rapidement et commence à prendre en charge le système de module de la plate-forme Java.
GraalVM démarre également plus rapidement les applications Java non natives interprétées. Cela aide pendant le développement où l'exécution d'exécutables Java natifs n'est pas pratique en raison des temps longs de build.
GraalVM est disponible en deux éditions : Community Edition et Enterprise Edition. L'édition Community est diffusée sous licence GPL avec "Classpath" Exception qui signifie qu'elle est "libre d'utilisation à n'importe quelle fin et vient sans aucune condition, mais aussi sans garantie ni support." Ses versions reçoivent des mises à jour pendant un an. L'édition Entreprise nécessite l'abonnement Oracle Java SE pour une utilisation en production, payé par utilisateur ou par processeur.
L'édition Entreprise inclut également le support par Oracle et dispose de fonctionnalités exclusives de performances et de sécurité, telles que des optimisations guidées par profil et le ramasse-miettes G1. C'est pourquoi ses exécutables natifs atteignent 98% des performances d'OpenJDK dans un mix de référence contre 43% avec l'édition Community, tout en utilisant moins de mémoire et en démarrant plus rapidement que les applications OpenJDK.
Oracle affirme que les exécutables natifs de l'édition Entreprise sont même jusqu'à 40 % plus rapides qu'OpenJDK dans certaines scénarios de machine-learning. Constant Blinding est un exemple de fonction de sécurité dans l'édition Enterprise. Il protège contre les attaques de type JIT spraying et peut être activé avec -Dgraal.BlindConstants=true
.
Une nouvelle option de configuration au moment du build des exécutables natifs permet de désactiver des fonctionnalités telles que la réflexion, JNI, les objets Dynamic Proxy et d'exclure les ressources du classpath si une classe n'est pas accessible. Cela peut conduire à des exécutables natifs plus petits.
Le nouveau proftool
(sous Linux uniquement pour l'instant) collecte au runtime des métriques de performance des applications Java de la JVM, de l'outil Linux perf
et de HotSpot LogCompilation. Cela aide à l'analyse des performances du JIT.
Le GraalVM Polyglot Runtime exécute plusieurs langages en plus de Java. L'environnement d'exécution JavaScript a été mis à jour vers Node.js 14.17.6 et a amélioré sa prise en charge de WebAssembly. L'environnement d'exécution Python peut désormais exécuter des packages binaires HPy sans recompilation. Il prend également en charge le module de multitraitement pour orchestrer les tâches dans plusieurs contextes Python sur une machine multicœur et dispose d'un module de socket écrit en code natif.
Ruby sur GraalVM utilise désormais TRegex, un moteur d'expressions régulières plus efficace, et est jusqu'à 9 fois plus rapide dans certains benchmarks. Le runtime R est passé de PCRE à PCRE2 version 10.37. La chaîne d'outils LLVM pour la compilation C/C++ a été mise à jour vers la version 12.0.1. Et WebAssembly s'exécute plus rapidement dans certains scénarios sur GraalVM Enterprise Edition.
L'outillage GraalVM a été amélioré dans Visual Studio Code : les GraalVM Tools for Java peuvent s'attacher à des exécutables natifs pour le débogage. Et les GraalVM Tools for Micronaut peuvent déployer, exécuter et déboguer des applications Micronaut dans un cluster Kubernetes.
Spring Native, une nouvelle initiative de Spring, crée des exécutables natifs pour les applications Spring. La version 0.11, dont la sortie est prévue le 19 novembre 2021, reposera sur GraalVM 21.3 et la prochaine version de Spring Boot 2.6. La pile Java native pour Kubernetes Quarkus utilisera GraalVM 21.3 comme version recommandée dans la prochaine version 2.5. Le framework full-stack Micronaut prendra officiellement en charge GraalVM 21.3 avec la prochaine version de la version 3.2.0 prévue pour fin novembre ou décembre 2021.