Oracle GraalVM est un JDK à hautes performances qui peut accélérer les applications Java et JVM en utilisant un compilateur juste à temps (JIT). Il réduit la latence des applications, améliore le débit de pointe en réduisant le temps de collecte des déchets et est accompagné d'un support Oracle 24h/24 et 7j/7.
Il existe également un utilitaire d'image native qui compile le bytecode Java en amont (AOT) et génère des exécutables natifs pour certaines applications qui démarrent presque instantanément et utilisent très peu de ressources mémoire.
GraalVM est né en 2011 d'un projet de recherche d'Oracle Labs visant à créer une plateforme d'exécution capable d'exécuter plusieurs langages de programmation avec des performances élevées. Le cœur du projet GraalVM est le compilateur GraalVM à optimisation avancée, qui est utilisé comme compilateur juste-à-temps (JIT) pour la machine virtuelle Java (JVM) ou par la fonction d'image native GraalVM pour compiler les bytecodes Java en avance sur le temps en code machine natif. Le cadre d'implémentation du langage Truffle de GraalVM fonctionne avec le compilateur GraalVM pour exécuter JavaScript, Python, Ruby et d'autres langages pris en charge sur la JVM avec des performances exceptionnelles.
Lorsque GraalVM est activé en mode JIT, la JVM utilise le compilateur GraalVM Enterprise JI pour créer un code machine adapté à la plateforme à partir du bytecode Java pendant l'exécution de l'application. La compilation est effectuée de manière incrémentielle pendant l'exécution du programme, avec une optimisation supplémentaire appliquée au code qui est fréquemment exécuté. Cette approche garantit que le code dans les hotspots s'exécute extrêmement rapidement grâce à un inlining agressif, une analyse d'échappement partiel et d'autres optimisations avancées. Certaines optimisations réduisent les allocations d'objets, ce qui diminue la charge du ramasseur de déchets. Cela permet d'améliorer les performances maximales des applications à long terme.
L'utilitaire d'image native GraalVM peut également compiler le bytecode Java pour générer des exécutables machine natifs en amont (c'est-à-dire au moment de la construction). Ces exécutables démarrent presque instantanément et consomment une fraction de la mémoire qui serait utilisée par la même application Java tournant sur la JVM. Les exécutables natifs sont également compacts car ils n'incluent que les classes, les méthodes et les bibliothèques dépendantes dont l'application a besoin.
GraalVM prend également en charge l'interopérabilité multilingue grâce au cadre d'implémentation linguistique Truffle. Truffle permet aux programmes écrits dans des langages pris en charge d'utiliser des bibliothèques multilingues. Par exemple, un programme JavaScript peut appeler des méthodes Ruby et partager des valeurs sans faire de copies. Lorsqu'il est exécuté sur une JVM, Truffle collabore avec le compilateur GraalVM pour compiler les langues prises en charge en code machine natif afin d'obtenir des performances optimales, tout comme Java.
Pour en savoir plus sur le compilateur GraalVM, lisez l'eBook GraalVM pour les nuls
Le compilateur de GraalVM comprend plusieurs algorithmes d'optimisation supplémentaires qui améliorent significativement les performances et la consommation de ressources. L'image native de GraalVM prend en charge un certain nombre de fonctionnalités avancées, notamment le nettoyage de la mémoire G1, les pointeurs compressés et l'optimisation guidée par profil qui aide le compilateur à générer un code plus efficace.
GraalVM est inclus dans l'abonnement Java SE sans coût supplémentaire. Il comprend un support 24/7 par Oracle avec accès aux correctifs de sécurité et aux mises à jour du chemin critique pour des performances et une fiabilité plus prévisibles. Pour la migration de Java vers le cloud, GraalVM peut être utilisé gratuitement sur Oracle Cloud Infrastructure (OCI).
GraalVM peut permettre aux développeurs de construire un code plus efficace, avec une meilleure isolation et une plus grande agilité pour les environnements cloud ou hybrides. Voici quelques-unes des raisons pour lesquelles de plus en plus d'entreprises utilisent aujourd'hui GraalVM :
Grâce aux innovations de GraalVM, le code Java peut plus facilement s'adapter aux exigences informatiques actuelles avec des performances plus élevées pour répondre rapidement aux besoins des clients. L'optimiseur avancé améliore le débit de pointe. Il optimise également la consommation de mémoire en minimisant les allocations d'objets afin de réduire le temps consacré à la collecte des déchets. GraalVM en mode JIT peut améliorer les performances jusqu'à 50 %. La mémoire est ainsi libérée plus rapidement, ce qui permet d'exécuter d'autres charges de travail sur la même infrastructure et de réduire les coûts informatiques.
Créer des applications cloud nativesL'utilitaire d'image native de GraalVM compile à l'avance les applications Java en exécutables natifs. Les exécutables natifs démarrent presque 100 fois plus rapidement et consomment jusqu'à 5 fois moins de mémoire.
Alors que les entreprises déplacent leurs charges de travail vers le cloud et paient à l'heure pour l'utilisation des ressources système, GraalVM peut les aider à réaliser des économies de coûts opérationnels. Ces résultats rendent les exécutables natifs générés par GraalVM idéaux pour le déploiement de microservices, un domaine pris en charge par les principaux cadres de microservices, tels que Helidon, Micronaut, Quarkus et Spring Boot.
Développer des programmes multilingues et améliorer la productivitéVous pouvez exécuter Java et d'autres langages, tels que JavaScript, sur la JVM avec d'excellentes performances. La solution SuiteScript d'Oracle NetSuite est un langage d'extension permettant aux utilisateurs finals de personnaliser les applications exécutées sur NetSuite. Oracle GraalVM a permis à NetSuite d'intégrer un moteur d'exécution JavaScript basé sur Truffle, capable de compiler des instructions JavaScript en code machine qui s'exécute 4 fois plus rapidement que SuiteScript sur la JVM.
GraalVM comprend un compilateur optimiseur avancé qui génère du code machine pendant l'exécution du programme JIT pour améliorer les performances des applications Java. En compilant à l'avance, l'image native démarre rapidement et utilise moins de mémoire, ce qui la rend idéale pour le déploiement de l'informatique dématérialisée. Il prend en charge les programmes multilingues afin d'améliorer la productivité en permettant aux développeurs d'utiliser les meilleures bibliothèques nécessaires pour résoudre les problèmes de l'entreprise, quelle que soit la langue dans laquelle elles sont écrites.