Java 如何使用JLINK

Java 如何使用JLINK,java,docker,graalvm,jlink,Java,Docker,Graalvm,Jlink,我们正在研究如何升级到Java9。JLINK的一个新功能是生成我们自己的JRE,它与我们的应用程序完全匹配 我有一些天真的问题: 在哪种情况下我们应该这样做?我理解微服务的好处,但是web应用程序呢 大公司真的在使用它吗,还是他们主要使用普通的JDK 如何维护JLINK JRE?我们是否应该在每个新的Java版本中重建它(Docker镜像也是如此…) 如果graalVM与我们的应用程序兼容,它不是总是更好/更容易吗 谢谢。jlink旨在使Java应用程序可以轻松地交付到其他机器上,而不需要安

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

我有一些天真的问题:

  • 在哪种情况下我们应该这样做?我理解微服务的好处,但是web应用程序呢

  • 大公司真的在使用它吗,还是他们主要使用普通的JDK

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

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


谢谢。

jlink
旨在使Java应用程序可以轻松地交付到其他机器上,而不需要安装JVM。 您可以将应用程序作为一个自包含的映像提供,其中不仅包括您的代码,还包括JVM的代码(但仅包括运行应用程序所需的部分),而不是使用本地
java
命令来运行JAR(这可能与编译程序所依据的java版本不匹配)

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

现在,请回答您的问题:

在哪种情况下我们应该这样做

如果您不希望在预安装兼容JVM的情况下遇到麻烦,应用程序将在其中执行,并且您也不会从提供尽可能最小的应用程序(这只是您的应用程序所包含的JAR集)中获得太多好处

大公司真的在使用它吗,还是他们主要使用普通的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