Difference between revisions of "VT2020-GraalVM-Fiche"

From air
Jump to navigation Jump to search
Line 49: Line 49:
 
==Architecture==
 
==Architecture==
   
  +
Comme dit précedemment, GraalVM réutilise
[[File:graal_vm_architecture.jpg | 300px | thumb | right | Architecture de GraalVM]]
 
  +
 
[[File:graal_vm_architecture.jpg | 500px | thumb | right | Architecture de GraalVM]]
   
 
==Installation==
 
==Installation==

Revision as of 15:51, 14 November 2020

Rappels sur l'architecture de la plateforme Java

L'architecture de GraalVM se basant sur celle d'un Java Development Toolkit, un rappel sur le fonctionnement de la plateforme Java peut s'avérer utile.

Tout d'abord, le Java a la particularité d'être un langage à la fois compilé et interprété. Les tâches de compilation et d'interprétation sont distinctes et réalisées par des composants différents. Comme on peut le voir sur le schéma ci-dessous, le code Java est d'abord compilé en bytecode par un Java Compiler pour ensuite être interprété et exécuté par une Java Virtual Machine.

Composition d'un JDK

Il faut donc distinguer dans cette architecture :

  • La Java Virtual Machine (JVM), qui interprète et exécute le code.
  • Le Java Runtime Environment (JRE), qui un environnement d'exécution contenant des librairies et la JVM.
  • Le Java Development Toolkit (JDK), qui est composé de librairies en Java, du JRE et du Java Compiler.

GraalVM

Abstract

"GraalVM is a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages. GraalVM’s polyglot capabilities make it possible to mix multiple programming languages in a single application while eliminating any foreign language call costs."

Documentation officielle de GraalVM

Motivations

Constats

Malgré son apparente popularité, le langage Java est sur le déclin. A l'origine, ce langage conçue par Sun Microsystems et dit "JVM" (comme Kotlin ou Scala) avait été conçu avec l'idée de pouvoir être exécuté sur n'importe quelle plateforme ayant une JVM, affranchissant ainsi le développeur des spécifités d'exécution de la plateforme (d'où le slogan "Write Once Run Anywere"). Cependant, à cause la surcouche logicielle induite par la JVM, le langage Java a essuyé des critiques sur sa performance et sur sa verbosité.

S'ajoute à cela un regain de popularité des langages natifs dans les années 2010, notamment grâce à Apple et son développement mobile iOS en Objective-C qui contraste avec Java ou Kotlin (étant tous deux des langages JVM) en terme de performance.

Pour répondre à ces problématiques, l'entreprise Oracle se doit d'adapter constamment Java afin de rester compétitive, et sa JVM avec.

Ce qui existait déjà

Evidemment, Java fonctionnait bien avant l'arrivée de GraalVM, ce qui signifie qu'il existait donc déjà des machines virtuelles. La plus utilisée d'entre elles est HotSpot, écrites en C++. Elle a été créé par Sun et appartient aujourd'hui à Oracle depuis le rachat de Sun. Notez que toutes les JVM (ou autres composants de la plateforme Java), ne sont pas forcément propriété d'Oracle : par exemple, OpenJ9 est une JVM dont la propriété revient à IBM et à la fondation Eclipse. Ces composants doivent ceci dit respecter des spécifications dictées par Sun (https://docs.oracle.com/javase/specs/).

La première version de Hotspot n'était qu'un interpréteur, puis elle a été améliorée avec un ajout de la compilation à la volée (Just-In-Time). Ensuite elle a été capable de détecter les portions de code les plus fréquemment utilisés et de les optimiser. Au final, Hotspot est composée d

Ceci dit, GraalVM trouve ses racines dans le projet Maxine (dévelopé par Sun Microsystems Laboratories en 2005), dont l'objectif était d'écrire une JVM en langage Java pour s'affranchir des problèmes de développement liés au C++, plus particulièrement la gestion de la mémoire. Le projet s'est avéré trop ambitieux à l'époque mais a servi de point de départ pour GraalVM presque 15 ans plus tard.

Solution

Les objectifs ayant mené à la création de GraalVM sont multiples :

  • Avoir un environnement qui accélère l'exécution des applications écrites en Java ou d'autres langages JVM afin de rivaliser avec les langages natifs
  • Fournir un environnement d'exécution qui supporte plusieurs langages de programmation, supprimant ainsi l'isolation entre eux et établissant une véritable inter-opérabilité.

La solution développée est GraalVM, une machine virtuelle haute performance (d'après les dires d'Oracle) qui prend en fait la forme d'un JDK.

Architecture

Comme dit précedemment, GraalVM réutilise

Architecture de GraalVM

Installation

Utilisation

GraalVM est très simple à utiliser. Plusieurs options sont possibles :

Par ligne de commande

Dans un IDE

Dans l'IDE, il suffit de remplacer le path du JRE ou du JDK par le path de GraalVM. Sous eclipse par exemple, cela peut se faire en allant dans Window/Preferences/Java/Installed JREs

Installer des langages

Par défaut, GraalVM ne comprend que le Java. Cependant, il est possible d'installer d'autres langages à l'aide d'une simple commande.

$GRAALVM_HOME/bin/gu install nom_du_langage

Demonstration

Sources

Veille Technologique 2020