我们正在研究如何升级到Java 9,一个新的特性是JLINK生成我们自己的JRE,这与我们的应用程序非常匹配。
我对此有一些天真的疑问:
与我们的应用程序兼容的话,我们是否应该在每个新的Java发行版(以及对于Docker映像.)重新构建
谢谢。
发布于 2020-04-21 15:57:35
jlink的目的是使Java应用程序可以轻松地移植到其他机器上,而不需要安装JVM。您没有发送jars并使用本地java命令运行jars(这可能与程序编译时使用的Java版本不匹配),而是将应用程序作为一个独立包含的映像发布,该映像不仅包括您的代码,而且还包括JVM的代码(以及运行应用程序所需的部分)。
压缩后,一个典型的、不太大的jlink应用程序将只有大约50 is (同样,这包括JVM)。
现在,关于你们的问题:
--在这种情况下,我们应该这样做?
如果您不希望在预安装应用程序的地方预先安装兼容的JVM,并且您也不会从发布尽可能小的应用程序(这将仅仅是应用程序包含的一组jars )中获得什么好处,那么就不会有什么好处。
是真正使用它的大公司,还是主要使用通常的JDK?
我不能肯定地回答这个问题,但由于jlink是一个相对较新的工具,我不希望很多大公司已经在使用它。
这将随着时间的推移而改变,因为jlink可以帮助您,正如您所提到的,使非常流行的Java微服务更易于部署。
如何维护JLINK?我们是否应该在每个新的Java版本(对于Docker映像也是如此)重新构建它.
您只需选择使用哪个JDK编译您的应用程序,jlink (它是JDK的一部分)将为您构建它。要升级您交付的JVM,只需升级用于构建的JDK。
我建议经常升级它,因为JDK通常每个季度都会提供大量的安全修复。
如果graalVM与我们的应用程序兼容,那么它不是总是更好/更容易吗?
使用GraalVM或其他JDK发行版的选择似乎与使用jlink是正交的,除非您的意思是使用GraalVM而不是jlink映像构建本地映像?在这种情况下,我想说jlink在这个阶段更可靠:如果您使用jlink构建应用程序,一切都将如出一辙,而GraalVM的本机映像仍然是相当试验性的,许多普通的Java应用程序将无法处理我到目前为止所做的一些小实验中的本地映像,而无需付出很大的努力.如果您的应用程序使用本机映像,那么它确实有一些好处,比如图像大小和内存消耗都更小,启动速度更快.但是在JVM温暖之后,它的峰值性能可能会更低,因为它不能像一个完整的JVM那样执行JIT。
https://stackoverflow.com/questions/61224447
复制相似问题