Cet article est le deuxième d’une série abordant les concepts introduits dans GraalVM et en quoi ils changent la donne pour utilser Java en tant que langage de programmation dans les architectures microservices.



GraalVM, une nouvelle génération de machine virtuelle

L'écosystème de GraalVM
L'écosystème de GraalVM

Qu’est-ce que c’est ?

  • GraalVM est une Machine Virtuelle (VM), Open Source, issue d’un projet de recherche chez Oracle Labs.
  • Elle est maintenue par une communautĂ© d’acteurs majeurs du net (Oracle, Amazon, Twitter, RedHat notamment avec Quarkus, VMWare pour l’intĂ©gration de son framework Spring, …).

  • C’est une nouvelle gĂ©nĂ©ration de VM, polyglotte, c’est Ă  dire qu’elle supporte de nombreux langages, mĂŞme ceux qui ne gĂ©nèrent pas de bytecode. A terme, elle pourrait remplacer l’actuelle VM HotSpot.

  • Plus de dĂ©tails sur https://www.graalvm.org/

En quelques mots

La VM GraalVM est couplée à un nouveau compilateur, Graal, écrit entièrement en Java (ce qui permet une compilation cyclique) :

  • Il vise Ă  remplacer le compilateur C2 utilisĂ© pour le JIT de la VM HotSpot et qui est arrivĂ© en fin de vie car trop complexe Ă  faire Ă©voluer (mĂ©lange d’assembleur, C, Java)
  • Le compilateur Graal peut aussi faire de la compilation AOT (Ahead-Of-Time, Ă  l’avance) aussi appelĂ©e compilation anticipĂ©e.

L’architecture de GraalVM

Les composants de GraalVM
Les composants de GraalVM

1. Le compilateur Graal

  • Il compile en Bytecode les langages pour JVM.
  • IntĂ©grĂ© Ă  la JVM, il est capable de faire de la compilation JIT.
  • Il peut aussi faire de la compilation AOT.

2. Le framework Truffle

  • Il permet de dĂ©crire, sous la forme d’un Abstract Syntax Tree (AST ou Arbre Syntaxique), la grammaire de langages inconnus de la JVM.
  • Le compilateur Graal, Ă  l’aide des modules Truffle de chaque langage, est capable d’interagir avec eux.
  • L’API Polyglot, Ă©crite en Java, permet de faire passer des messages de Java vers les autres langages et d’interagir avec eux.

Exemple de modules Truffle

  • Graal.js dĂ©finie l’AST de JavaScript.
  • Sulong implĂ©mente l’AST du bitcode LLVM (C, C++, Rust, Objective-C, Fortran, Mono,…)
  • Autres modules en cours d’implĂ©mentation :
    • WebAssembly (pour les applications web),
    • CUDA (pour les cartes graphiques NVidia),…

3. La Machine Virtuelle

Deux JVMs peuvent être intégrées à GraalVM en tant que Machine Virtuelle :

  • Par dĂ©faut, c’est la JVM HotSpot qui exĂ©cute le bytecode des programmes Java. Mais c’est le compilateur Graal qui intervient dans la compilation JIT.
  • On peut aussi installer la machine virtuelle SubstrateVM, incluse dans le module nativeimage. C’est cette VM minimaliste qui offre la compilation AOT.

4. Les Runtimes

  • Ils permettent d’exĂ©cuter les langages autres que ceux pris en charge par les JVMs (la JVM HotSpot comme la SubstrateVM).
  • Les runtimes node.js (ECMAScript compliant) et llvm font partie de l’installation standard.
  • Les autres runtimes doivent ĂŞtre installĂ©s explicitement : l’interprĂ©teur Python 3.7, celui de Ruby 2.6.5 ou encore de GNU R 3.6.1.

Les composants de GraalVM :

  1. Composants Core :

    • la JVM GraalVM,
    • le compilateur Graal,
    • un runtime LLVM,
    • un runtime JavaScript qui prend en charge Node.js
  2. Des runtimes optionnels :

    • Native Image qui intègre le compilateur ahead-of-time (AOT)
    • LLVM toolchain
    • Python interpreter
    • Ruby interpreter
    • R interpreter
    • WebAssembly interpreter (Wasm)

Et alors ?

On est en droit de se demander à présent, en quoi cela change la donne pour Java et les microservices.

Certes, il nous fallait passer par cette présentation théorique mais déjà, on peut appréhender tout le potentiel d’une telle refonte :

  • Un nouveau compilateur, plus efficace,
  • La possibilitĂ© de compiler son application directement en code natif,
  • La capacitĂ© d’intĂ©grer de multiples langages Ă  son application Java,…

Reste à voir en pratique le résultat. C’est ce que nous ferons dans l’article suivant.

Cheers…

Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂ´me LĂ©vy

Consultant DevOps

Professionnel chevronné dans le domaine de l’informatique, cumulant plus de 20 années d’expérience au sein de DSI de grandes entreprises, mon expertise diversifiée m’a permis de jouer un rôle clé dans de nombreux projets, caractérisés par la mise en place de pratiques DevOps innovantes.