冷凝器有望加速 Java 程序
Project Leyden 是一项旨在改善 Java 程序的启动时间、性能和占用空间的雄心勃勃的工作,它将提供冷凝器。 冷凝器是在编译时和运行时之间运行的代码,它将原始程序转换为一个新的、更快的、可能更小的程序。
在 10 月 13 日发表的一篇在线论文中,Oracle Java 平台组的首席架构师 Mark Reinhold 表示,可以通过将程序的一些计算暂时转移到运行时后期或向后的某个点来改善程序的启动和预热时间以及足迹到比运行时间早的一点。 通过限制一些与 Java 的动态特性相关的计算,例如类加载、类重新定义和反射,可以进一步提高性能,从而实现更好的代码分析和更多的优化。
Reinhold 说,Leyden 项目将以冷凝器的形式实施这些移动、约束和优化转换。 此外,还将研究新的语言功能,以允许开发人员自行转移计算,从而进一步压缩。 然而,Java 平台规范将需要发展以支持这些转换。 JDK 的代码工件(如 JAR 文件)工具和格式也需要扩展以支持冷凝器。
Reinhold 说,压缩模型为开发人员提供了更大的灵活性。 开发人员可以选择应用哪些冷凝器,并在此过程中选择是否以及如何接受限制 Java 自然活力的约束。 压缩模型还为 Java 实现提供了相当大的自由度。 只要冷凝器保留程序意义并且不施加除开发人员接受的约束外的约束,实现将有很大的自由度来优化结果。
Reinhold 说,要改善启动和预热时间以及占用空间,最好的办法是确定可以简单地消除的计算。 如果做不到这一点,计算可以及时向后或向前移动。 这种及时转移计算的概念并不新鲜。 Java 实现已经具有许多转移计算的特性。 例如,编译时常量折叠将计算从运行时向后移动到编译时,垃圾收集将内存回收及时向前移动。 其他计算转移机制是可选的,包括提前计算和类数据共享。
在今年早些时候开始推进之前,莱顿计划已经讨论了两年多。 该项目由 Java 开发领域内的 HotSpot 虚拟机和核心库组赞助。