GraalVM est un JDK avancé avec une compilation Native Image anticipée qui permet de créer des applications plus rapides, plus petites et plus légères. GraalVM propose une faible utilisation des ressources, un démarrage rapide, des packaging compacts et une sécurité améliorée. Les SDK des principales plateformes cloud telles que AWS, Microsoft Azure, GCP et Oracle Cloud Infrastructure intègrent et prennent en charge GraalVM. Des frameworks populaires tels que Spring Boot, Micronaut, Helidon et Quarkus offrent également un support pour GraalVM.
Avec la sortie de GraalVM pour JDK 23, GraalVM présente les améliorations apportées à GraalPy son moteur d'exécution Python 3 embarqué et performant pour Java. GraalPy apporte le monde des bibliothèques de science des données Python à Java et à d'autres langages fonctionnant sur GraalVM. Grâce aux interfaces polyglottes de GraalVM, il est désormais plus facile d'intégrer du code Python dans des applications Java, avec de bonnes performances à la clé. Pour GraalPy, la priorité de GraalVM était le code Python pur et les cas d'utilisation de Jython.
Des tests sur la suite de benchmark "Are-we-fast-yet" ont permis de comparer les performances de GraalPy et d'autres sur JDK8. Les résulats montrent que l'implémentation de la même suite tourne environ 2,4 fois plus vite avec JDK8 qu'avec GraalPython EE 22.3 Hotspot, ou 41 fois plus vite qu'avec CPython 3.11. GraalPython est donc environ 17 fois plus rapide que CPython, et environ deux fois plus rapide que PyPy. La Graal Enterprise Edition (EE) semble être 1,31 fois plus rapide que la Community Edition (CE). Les résultats de ces tests sont disponible ici et sous forme tableau.
Voici quelques améliorations de GraalVM pour JDK 23 :
Des applications plus rapides, moins de mémoire
Le tableau suivant montre les performances de Native Image. Il confirme que GraalVM pour JDK 23 propose un démarrage rapide et une faible utilisation de la mémoire.
Nouveau Garbage Collector compact
Un Garbage Collector compact a été ajouté pour l'ancienne génération du Serial GC. L'intention première est de réduire l'utilisation maximale de la mémoire par rapport au GC copiant, qui peut utiliser deux fois la taille actuelle du tas lorsque tous les objets survivent. Comme le montre l'exemple du benchmark Scrabble, le Garbage Collector compact peut réduire l'utilisation de la mémoire d'environ 20 %. Bien que l'utilisation de la mémoire puisse diminuer, il n'y a pas de pénalité de performance - le débit maximal de l'application reste le même.
Exécutables plus petits
Cette version ajoute un nouveau niveau d'optimisation dans Native Image, -Os. Cette option configure la compilation pour optimiser la plus petite taille de code, et donc la plus petite taille d'exécutable. Elle active toutes les optimisations -O2 à l'exception de celles qui peuvent augmenter la taille de l'image. Attention cependant, ce mode est excellent pour la taille de l'image, mais il n'est pas forcément le meilleur pour le débit maximal : comparez et choisissez le niveau d'optimisation en fonction de vos objectifs.
Voici un exemple d'une application web Spring Boot basique, construite avec GraalVM pour JDK 23. Avec le mode optimisé pour la taille, l'application native est 35% plus petite.
Étendez vos applications Java avec les bibliothèques Python et Wasm
GraalVM offre une interopérabilité fluide, rapide et facile entre plusieurs langages. Maintenant, étendre votre application Java avec des bibliothèques de science des données de Python, ou des packages de bas niveau de Wasm, est devenu encore plus facile. GraalPy et GraalWasm sont désormais considérés comme stables et adaptés aux charges de travail de production. Pour GraalPy, la priorité a été le code Python pur et les cas d'utilisation de Jython. Les langages sont maintenant des dépendances Maven normales.
Suivi de la mémoire native
Le "Native Memory Tracking" est une fonctionnalité de la JVM qui permet de suivre l'utilisation de la mémoire interne de HotSpot. Comme premier pas vers le support du NMT, un PR a ajouté le support du suivi de mallocs/calloc/realloc dans Linux. La prise en charge du suivi de la mémoire virtuelle et la prise en charge des événements JFR du NMT seront ajoutées dans des PRs ultérieurs.
Source : GraalVM
Et vous ?
Avez-vous utiliser cet outil, si oui, qu'en pensez-vous ?
Voir aussi :
Python creuse l'écart et renforce son avance en tant que langage de programmation le plus populaire sur l'indice TIOBE : Mais pourquoi le langage est-il autant prisé ?
JDK 23 : attendue pour septembre, Java 23 va s'accompagner d'une seconde preview de l'API de fichier de classe, du collecteur de flux ainsi que d'autres fonctionnalités
OpenJDK propose le projet Galahad qui vise à fusionner la compilation native de GraalVM, pour fournir la capacité de compiler les programmes Java en code machine avant l'exécution