Chapitre Introduction à l'Architecture Microservices avec Quarkus
Présentation de GraalVM
La leçon "Introduction aux Architectures Microservices avec Quarkus" explore la technologie derrière Quarkys, GraalVM et présente les différences entre la JVM et GraalVM.
Exercices inclus

Exercices inclus
Présentation de GraalVM

Quelques mots sur GraalVM
- Développé par Oracle Labs
- Runtime hautes performances pour les langages JVM
GraalVM : Gratuit ou Payant ?
Versions Gratuites
GraalVM Community Edition
- Licence : Disponible sous licence GPL 2 avec la clause Classpath Exception.
- Fonctionnalités : Inclut la plupart des fonctionnalités de GraalVM, telles que le compilateur JIT, le support polyglotte et la création d'images natives.
- Usage : Idéale pour les développeurs open-source, les petites entreprises et les projets personnels.
Versions Commerciales
GraalVM Enterprise Edition
- Licence : Licence commerciale, souvent accompagnée d'un support technique et de mises à jour supplémentaires.
- Fonctionnalités Avancées : Inclut des optimisations de performance supplémentaires, des outils de diagnostic avancés et une meilleure gestion de la mémoire par rapport à la Community Edition.
- Usage : Destinée aux entreprises et aux utilisateurs ayant des besoins critiques en termes de performance et de support.
Comparaison des Editions
Caractéristique | Community Edition | Enterprise Edition |
---|---|---|
Licence | GPL 2 + Classpath | Licence commerciale |
Support Officiel | Non | Oui |
Optimisations Supplémentaires | Non | Oui |
Outils de Diagnostic Avancés | Non | Oui |
Gestion Avancée de la Mémoire | Non | Oui |
Idéal pour | Open source, petits projets | Entreprises, projets critiques |
Utilisation et Téléchargement
- Community Edition : Disponible gratuitement en téléchargement depuis le site officiel de GraalVM ou GitHub.
- Enterprise Edition : Nécessite un abonnement commercial disponible via Oracle.
Caractéristiques clés
- Support polyglotte
- Exécution de programmes dans plusieurs langues
- Intégration transparente de Java, JavaScript, Python, Ruby, R, et plus encore
- Compilateur hautes performances
- Le compilateur GraalVM offre des performances améliorées
- Permet la compilation anticipée

Support de plusieurs languages
- Contrairement à la JVM, GraalVM supporte différents langages
Image Native
Image Native est une technologie permettant de compiler le code Java à l'avance en un binaire – un exécutable natif. Un exécutable natif inclut uniquement le code requis à l'exécution, c'est-à-dire les classes de l'application, les classes de la bibliothèque standard, l'environnement d'exécution du langage, et le code natif lié statiquement à partir du JDK.
Un fichier exécutable produit par Image Native présente plusieurs avantages importants :
- Utilise une fraction des ressources requises par la Java Virtual Machine, ce qui le rend moins coûteux à exécuter.
- Démarre en quelques millisecondes.
- Offre des performances optimales immédiatement, sans période de préchauffage.
- Peut être emballé dans une image de conteneur légère pour un déploiement rapide et efficace.
- Présente une surface d'attaque réduite.
Un exécutable natif est créé par le générateur d'Image Native ou native-image
, qui traite les classes de votre application et d'autres métadonnées pour créer un binaire pour un système d'exploitation et une architecture spécifiques. Tout d'abord, l'outil native-image
effectue une analyse statique de votre code pour déterminer les classes et méthodes accessibles lorsque votre application s'exécute. Ensuite, il compile les classes, les méthodes et les ressources en un binaire. Ce processus entier est appelé temps de construction pour le distinguer clairement de la compilation du code source Java en bytecode.
L'outil native-image
peut être utilisé pour créer un exécutable natif, ce qui est l'option par défaut, ou une bibliothèque partagée native. Ce guide de démarrage rapide se concentre sur la création d'un exécutable natif ; pour en savoir plus sur les bibliothèques partagées natives, consultez cette ressource.


Compilateur GraalVM JIT
- La JVM optimise le code pendant l’exécution (grâce au JIT), cette intelligence n’est pas possible dans les applications compilées avec GraalVm Native Image.
- Le temps de build d’une application native est extrêmement lent comparé au build d’un JAR.
- Dans les applications natives, nous perdons une partie de la puissance de la JVM: l’instrumentation (JMX), plus d’accès au heap dump et thread dump …
- Une JVM convient mieux au Heaps importants qu’un exécutable produit par Native Image.

Compilateur GraalVM AOT
- Le temps de build est extrêmement lent ;
- Absence d’instrumentation JMX ;
- Impossible d’avoir un Heap Dump ;
- Beaucoup de frameworks ne sont pas supportés à cause de la réflexion ;
- Moins efficace pour les Heaps importants avec de gros débits. En effet, uniquement le SerialGC est disponible pour la version Community. A noter que le G1 est disponible dans la version Enterprise de GraalVM.
- Code machine moins optimisé que celui produit par JIT.
GraalVM Native image
Native Image est une technologie permettant de compiler à l'avance du code Java en un exécutable autonome, appelé image native.
Objectifs
- Familiarisation avec GraalVM:Présenter GraalVM, compiler une application Java normalement et nativement.