解决Java启动慢等长期痛点的Leyden项目已经启动


本项目的最终目标是为了解决Java启动时间慢、性能达到峰值的时间慢以及占用空间大等长期痛点。

在讨论征集中,我建议我们通过在Java平台和JDK中引入静态运行时镜像(static run-time images )的概念来解决这些痛点。

  • 静态镜像是一个独立的程序,由一个应用程序和一个JDK衍生而来,运行该应用程序,而不是其他程序。
  • 静态镜像在它可以加载的类方面是一个封闭的世界。在运行时,它不能从镜像之外加载类,也不能动态地创建类。

这个封闭世界的约束对Java的自然动态性施加了严格的限制,特别是对许多现有的Java库和框架所依赖的运行时反射和类加载功能。不是所有的应用程序都适合这种约束,也不是所有的开发者都愿意接受这种约束。

因此,我建议我们不要一开始就采用封闭世界的约束,而是采用一种渐进的、渐进的方法。

我们将探索一系列比封闭世界约束更弱的约束,并发现它们能带来哪些优化。由此产生的优化几乎肯定会比封闭世界的约束所带来的优化要弱。然而,由于约束较弱,优化可能会适用于更广泛的现有代码--因此它们对更多的开发者更有用。

我们将沿着这个约束谱系逐步开展工作,从小的和简单的开始,以便我们能够对Java平台规范所需的变化有一个坚定的理解。当然,在这个过程中,我们将努力保持Java的核心价值,即可读性、兼容性和通用性。

我们将在很大程度上依靠JDK的现有组件,包括HotSpot JVM、C2编译器、应用类-数据共享(CDS)和jlink链接工具。

从长远来看,我们可能会接受完全的封闭世界的约束,以产生完全静态的图像。然而,从现在到那时,我们将开发并提供渐进式的改进,开发人员可以尽早使用。

让我们开始吧!