Sortie de GraalVM 20.1
jeu, 28/05/2020 - 14:39
GraalVM est une machine virtuelle universelle développée par Oracle, permettant d'exécuter des applications écrites dans des langages basés sur JavaScript, Python, Ruby, R, tels que Java, Scala, Kotlin, Clojure et LLVM, tels que C et C ++. GraalVM vient de sortir en version 20.1.
Cette version améliore considérablement la vitesse d'exécution de code Kotlin, lorsque celui-ci contient des coroutines. Jusqu'ici, le compilateur GraalVM ne savait pas comment traiter les boucles irréductibles dans le bytecode Java. Il s'agit d'un modèle particulièrement rare dans le bytecode qui permet des sauts au milieu du code de boucle sans passer par l'entrée de boucle. Ce cas ne se produit pas lorsque vous compilez du code Java ou Scala, Groovy ou Clojure, etc. mais il peut se produire si vous exécutez un obfuscateur de bytecode ou utilisez des coroutines Kotlin à l'intérieur des boucles. Ne pas être en mesure de traiter du code comme celui-ci signifiait que le compilateur devait renoncer à la compilation de l'unité entière dans ce cas de figure, pour s'appuyer sur l'interpréteur pour exécuter le code. Avec cette amélioration du compilateur, le code Kotlin contenant des coroutines peut s'exécuter jusqu'à 4 fois plus rapidement.
GraalVM 20.1 améliore aussi notablement l'expérience de construction d'images natives. Une image native est un fichier exécutable autonome qui apporte notamment une empreinte mémoire réduite et un démarrage plus rapide de l'application. Mais générer une image native peut s'avérer assez long, car l'outil de génération d'image native doit analyser toutes les classes de l'application et déterminer celles qui doivent être incluses dans l'exécutable.
Pour résoudre ce problème, les concepteurs de GraalVM ont ajouté dans cette version 20.1 un nouveau mécanisme, appelé 'flux de type saturé', pour accélérer l'analyse. Ce mécanisme n'est pas encore activé par défaut, vous devez donc l'activer manuellement avec l'option -H:+RemoveSaturatedTypeFlows en ligne de commande. Grâce à cette amélioration, la génération d'une image native est 25% plus rapide et utilise 25% de mémoire en moins.