OpenJDK 正在制定一项“JEP 493: Linking Run-Time Images without JMODs”的提案,旨在将 JDK 的大小减少约 25%。
“通过启用
jlink
工具,无需使用 JDK 的 JMOD 文件即可创建自定义运行时映像,从而将 JDK 的大小减少约 25%。此功能必须在 JDK 生成时启用;默认情况下不会启用,有些 JDK 供应商可能会选择不启用。”
该提案的动机在于减少云环境中文件系统上 JDK 的安装大小。“在云环境中,文件系统上安装的 JDK 的大小非常重要,因为包含已安装 JDK 的容器镜像会通过网络自动且频繁地从容器注册表中复制。减小 JDK 的大小将提高这些操作的效率。”
提案解释称,完整安装的 JDK 包含两个主要组件:运行时映像(即可执行的 Java 运行时系统)和运行时映像中每个模块的一组打包模块(JMOD 格式)。在创建自定义运行时映像时,jlink
工具会使用 JMOD 文件。完整 JDK 本身的运行时映像就是通过jlink
从这些 JMOD 文件创建的。因此,运行时映像中的每个类文件、本地库、配置文件和其他资源也都存在于其中一个 JMOD 文件中,从而造成了大量的空间浪费。
完整 JDK 中的 JMOD 文件约占 JDK 总大小的 25%。如果能增强jlink
工具以从运行时映像本身中提取类文件、本机库、配置文件和其他资源,就可以通过省略 JMOD 文件来大幅减少已安装 JDK 的大小。
因此,提案计划引入一个 JDK build-time 配置选项--enable-linkable-runtime
,在构建 JDK 时,jlink
可以在不使用 JDK 的 JMOD 文件的情况下创建运行时映像,并且不包含那些文件-即没有 jmods 目录。
$ configure [ ... other options ... ] --enable-linkable-runtime
$ make images
生成的 JDK 将比使用默认配置构建的 JDK 小 25%,并包含相同的模块。
更多详情可查看此处。