JLINK如何使用

How is JLINK used

我们正在研究如何升级到Java 9. JLINK 的一个新功能是生成我们自己的JRE,非常适合我们的应用。

我有一些天真的问题:

谢谢。

jlink 旨在使 Java 应用程序可以轻松地传送到其他机器,而无需安装 JVM。 不是运送 jar 并 运行 使用本地 java 命令(这可能与程序编译所针对的 Java 版本不匹配),而是将您的应用程序作为独立图像运送其中不仅包括您的代码,还包括 JVM 的代码(但仅包括 运行 应用程序所需的部分)。

一个典型的、不太大的 jlink 应用程序,在压缩后将只有大约 50MB(同样,这包括 JVM)。

现在,回答您的问题:

in which case should we do it?

在某些情况下,如果您不想在执行应用程序的地方预安装兼容的 JVM,并且您不会从发布尽可能小的应用程序(这将只是您的应用程序所包含的一组 jar)。

are big companies really using it, or do they use mostly usual JDKs?

我不能肯定地回答这个问题,但由于 jlink 是一个相对较新的工具,我预计不会有很多大公司已经在使用它。

这会随着时间的推移而改变,因为 jlink 可以提供很多帮助,正如您提到的,使 Java 非常流行的微服务更易于部署。

how to maintain a JLINK JRE? Should we rebuild it at each new Java release (and so for Docker images...)

您只需选择使用哪个 JDK 来编译您的应用程序,jlink(它是 JDK 的一部分)将为您构建它。要升级您发布的 JVM,只需升级您用来构建的 JDK。

我建议经常升级它,因为 JDK 附带许多安全修复程序,通常每季度一次。

if graalVM is compatible with our application, isn't it always better/easier?

选择使用 GraalVM 或其他 JDK 发行版似乎与使用 jlink 正交,除非你的意思是使用 GraalVM 而不是 jlink 图像构建原生图像?在这种情况下,我会说 jlink 在这个阶段更可靠:如果你使用 jlink 来构建你的应用程序,一切都会按预期工作,而 GraalVM 的原生图像仍然是非常实验性的,许多常见的 Java 应用程序将到目前为止,我所做的小实验不适用于原生图像,没有相当大的努力......如果你的应用程序使用原生图像,它确实有一些好处,比如在图像大小和RAM 消耗,以及更快的启动...但在 JVM 变热后它的峰值性能可能会降低,因为它无法像完整的 JVM 那样执行 JIT。