Une proposition présentée à la communauté OpenJDK par Mark Reinhold, architecte en chef du groupe Java Platform d'Oracle, pourrait résoudre certains problèmes posés depuis longtemps par Java, en particulier sa lenteur de démarrage, le laps de temps nécessaire pour atteindre les performances maximales et sa forte empreinte. Appelée « Project Leyden », la proposition préconise l’introduction d'images statiques dans la plate-forme Java et le JDK pour mettre fin à ces défauts. Une image statique est un programme autonome, lui-même dérivé d'une application qui exécute cette application, et aucune autre. Une image statique est également un « monde fermé » qui ne peut charger des classes depuis l'extérieur de l'image ou faire tourner de nouveaux bytecodes au moment de l'exécution.
L’exploitation de ces deux contraintes permettrait d’effectuer des analyses au moment de la construction afin de supprimer les classes inutilisées et identifier les initialisateurs pouvant être exécutés au moment de la construction, ce qui réduirait à la fois la taille de l'image d'exécution et son temps de démarrage. Ces contraintes permettraient également d’effectuer une compilation anticipée - dite « ahead-of-time », ou AOT - plus agressive, et de réduire ainsi le temps nécessaire à l'image pour atteindre ses performances maximales. Cependant, Mark Reinhold met en garde sur le fait qu’en raison de cette contrainte du monde fermé, les images statiques ne sont pas destinées à tout le monde, ni à tous les types d'applications. Souvent, les images statiques nécessitent une configuration manuelle pour obtenir les meilleurs résultats. « Nous pensons cependant que les effets seront intéressants dans les scénarios impliquant des déploiements importants, par exemple le déploiement de petits appareils embarqués et le cloud », a écrit M. Reinhold.
Une évolution de GraalVM
S'inspirant de recherches précédentes dans ce domaine, notamment des recherches autour du compilateur GNU pour Java et de Native Image pour GraalVM, Project Leyden propose d’ajouter des images statiques à la Java Platform Specification. La mise en œuvre de cette spécification nécessitera une évolution de GraalVM. Les développeurs n'utilisant que la fonction d'image statique standard et spécifique pourraient alors basculer facilement de Leyden dans le JDK, à Native Image dans GraalVM, et à d'autres implémentations conformes qui pourraient émerger. Ils pourront faire des compromis entre le temps de compilation, le temps de démarrage et la taille d'image. M. Reinhold, qui dirigera le projet, a précisé que la proposition ne prévoyait pas d’implémenter Leyden en fusionnant le code Native Image de GraalVM dans le JDK. Project Leyden serait plutôt basé sur des composants existants dans le JDK comme HotSpot JVM, le compilateur Java « ahead-of-time » (jaotc), le partage de données de classe application, et l'outil de liaison jlink.
Le débat sur le projet a été lancé le 27 avril par Mark Reinhold. Les premiers commentaires publiés sur une liste de diffusion du JDK sont mitigés. Une personne estime qu'il sera difficile d'ajouter des images statiques à la Java Platform Specification, mais trouve le projet intéressant et bienvenu. Une autre personne se réjouit de cette proposition, rappelant que le temps d’optimisation des performances et l'empreinte mémoire étaient les principales critiques formulées par les développeurs utilisant Java pour les micro-services. Un autre commentateur estime encore que cette proposition arrive au bon moment. Project Leyden pourrait démarrer avec un clone de la version principale actuelle du JDK, le JDK 15, et pourrait évoluer au rythme des principales releases. Project Leyden pourrait être délivré sous forme de propositions d'amélioration du JDK, les JEP (JDK Enhancement Proposals), avec un étalement sur plusieurs versions.