JLINK如何使用

Rol*_*our 5 java jlink docker graalvm

我们正在研究如何升级到Java 9。JLINK的一个新功能是生成我们自己的JRE,它与我们的应用程序完美匹配。

我对此有一些天真的问题:

  • 什么情况下我们应该这样做?我了解微服务的好处,但是 Web 应用程序呢?

  • 大公司真的在使用它吗?还是他们大多使用常用的 JDK?

  • 如何维护JLINK JRE?我们是否应该在每个新的 Java 版本中重建它(对于 Docker 镜像也是如此......)

  • 如果 graalVM 与我们的应用程序兼容,不是总是更好/更容易吗?

谢谢。

Ren*_*ato 4

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

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

现在,回答你的问题:

什么情况下我们应该这样做?

如果您不想在执行应用程序时依赖预先安装的兼容 JVM,并且您不会从交付尽可能小的应用程序(这只是一组您的应用程序包含的 jars)。

大公司真的在使用它吗?还是他们大多使用常用的 JDK?

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

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

如何维护JLINK JRE?我们是否应该在每个新的 Java 版本中重建它(对于 Docker 镜像也是如此......)

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

我建议经常升级它,因为 JDK 通常每个季度都会提供大量安全修复程序。

如果 graalVM 与我们的应用程序兼容,不是总是更好/更容易吗?

使用 GraalVM 或其他 JDK 发行版的选择似乎与使用 jlink 正交,除非您的意思是使用 GraalVM 而不是 jlink 图像构建本机映像?在这种情况下,我想说 jlink 在这个阶段更加可靠:如果您使用 jlink 构建应用程序,一切都会按预期工作,而 GraalVM 的本机映像仍然处于实验阶段,许多常见的 Java 应用程序将无法在本机上运行图像来自我迄今为止所做的小实验,没有付出很大的努力...如果您的应用程序使用本机图像,它确实有一些好处,例如在图像大小和 RAM 消耗方面占用的空间更小,以及启动速度更快...但在 JVM 预热后,它的峰值性能可能会较低,因为它无法像完整的 JVM 那样执行 JIT。