En cours d'élaboration, le projet Leyden vise à résoudre certains problèmes de Java, notamment sa lenteur du démarrage, sa vitesse insuffisante pour atteindre des performances maximales et sa trop forte empreinte, est en passe d'aboutir. Le projet, en discussion depuis plus de deux ans, compte résoudre ces différents points de friction de Java en introduisant des images statiques dans le JDK et la plate-forme Java. Dans un billet OpenJDK publié le 20 mai, Mark Reinhold, architecte en chef du groupe chargé de la plate-forme Java chez Oracle, a estimé qu'il était temps de lancer le projet.
Une image statique est un programme autonome, dérivé lui-même d'une application qui exécute celle-ci et aucune autre. Une image statique est aussi un « monde fermé » qui ne peut charger des classes que depuis l'extérieur de l'image. Et au moment de l'exécution, elle ne peut pas charger de classes en dehors de l'image, ni en créer dynamiquement. La contrainte du monde fermé limite strictement le dynamisme naturel de Java, notamment pour ce qui est des fonctions de réflexion et de chargement de classes à l'exécution, dont dépendent de nombreux frameworks et de nombreuses bibliothèques Java existantes.
Une contrainte à adopter progressivement
« Toutes les applications ne sont pas adaptées à cette contrainte et tous les développeurs ne sont pas prêts à s'en accommoder », a encore déclaré Mark Reinhold. Plutôt que d'adopter la contrainte du monde fermé dès le départ, l’architecte en chef a proposé une approche graduelle et incrémentale, en adoptant un mode exploratoire des contraintes. Les optimisations qui en résulteront seront probablement plus faibles que la contrainte du monde fermé. Mais les optimisations devraient être applicables à un plus large éventail de code existant.
À long terme, les développeurs du projet adopteront sans doute la contrainte du monde fermé total afin de produire des images entièrement statiques. Le travail s'appuiera fortement sur les composants existants du JDK, notamment la JVM HotSpot, le compilateur C2, le partage de données de classe application, et l'outil de liaison jlink.
Commentaire