我正在考虑使用 GraalVM 本机映像编译我的 Java 应用程序,但我所看到的所有文档都提到了减少启动时间,但没有提到整体应用程序性能的改进?
那么,通过这样做,我可以实际期待什么?
Tur*_*g85 12
一般来说,性能会下降。前段时间我向 GraalVM 团队报告了原生镜像的性能下降。性能下降的严重程度可能因用例而异。在我编写并用于分析的基准测试中(可以在此处找到代码的更新版本),开销范围从“几乎不明显”到“最多慢 5 倍”。我在 JCON 2019 (#shamelessSelfPromotion) 上的演讲中也提到了这一点。
GraalVM 团队有一张很好的幻灯片,说明了在哪个用例中使用什么技术:
(图片取自Thomas Würthinger的推文)
对于感兴趣的读者:正如Andrew 在 github 上提到的,性能不佳的一个主要因素是不存在 JIT 编译:除其他外,JIT 编译器可以消除很少使用的分支,从而显着提高性能。对于本机编译的代码,这显然是不可能的。
旁注:虽然我们讨论的是性能主题,但您可以执行由 clang 发出的位代码(即在 GraalVM 上执行C
/C++
程序),但根本不要指望“良好”的性能......