这里的目标是:
然而,没有任何好的文档将两者联系在一起。在这两个流程中,似乎有很多矛盾的方法来做事情。
是否有可能使用jlink构建一个运行时映像,它使用jaotc生成的二进制文件?
发布于 2018-05-07 21:24:16
不怎么有意思。九二九五 (jaotc)没有提到jlink,九月-282 (jlink)也没有提到jaotc。
但是,因为jlink只生成一个精简的JRE (但它仍然是一个JRE!)使用您的应用程序代码,可以告诉它使用您想要的AOT编辑库。
如JEP-295所述,我决定遵循为java.base模块生成本机AOT的过程,然后通过将jlink-generated启动程序设置为如下所示,在bin/my-app上更改JLINK_VM_OPTIONS启动程序:
JLINK_VM_OPTIONS=-XX:AOTLibrary=./libjava.base-coop.so然后我使用time bin/my-app运行我的启动程序,它对本地主机上的服务器发出HTTP请求(以避免网络延迟),然后打印完整的HTTP响应。
它使用AOT大约需要410 it,没有它需要210 it!
为了确认AOT是否正确,我添加了一些诊断标志:
JLINK_VM_OPTIONS="-XX:+UnlockDiagnosticVMOptions -XX:AOTLibrary=./libjava.base-coop.so -XX:+UseAOTStrictLoading"它没有显示任何错误或警告,因此我相信我没有犯可能扭曲结果的错误。
总之,至少在我的例子中,混合jlink和jaotc似乎并没有产生积极的影响,但请注意,在jaotc JEP中,它们确实说:
AOT compilation of any JDK modules, classes, or of user code,
is experimental and not supported in JDK 9所以,我想说,现在(2018年5月)对此作出判断还为时过早.让我们给他们时间来完善这一机制,并希望他们能够取得更多的改进。
目前,加快应用程序速度的一个更有希望的方法可能是使用GraalVM及其native-image命令。
https://stackoverflow.com/questions/50221593
复制相似问题