GraalVM 本机映像是提高整体应用程序性能还是仅减少启动时间?

Cla*_*ick 9 java graalvm

我正在考虑使用 GraalVM 本机映像编译我的 Java 应用程序,但我所看到的所有文档都提到了减少启动时间,但没有提到整体应用程序性能的改进?

那么,通过这样做,我可以实际期待什么?

Tur*_*g85 12

一般来说,性能会下降前段时间我向 GraalVM 团队报告了原生镜像的性能下降。性能下降的严重程度可能因用例而异。在我编写并用于分析的基准测试中(可以在此处找到代码的更新版本),开销范围从“几乎不明显”到“最多慢 5 倍”。我在 JCON 2019 (#shamelessSelfPromotion) 上的演讲中也提到了这一点。

GraalVM 团队有一张很好的幻灯片,说明了在哪个用例中使用什么技术: 正如@thomaswue 所发推文 (图片取自Thomas Würthinger推文

对于感兴趣的读者:正如Andrew 在 github 上提到的,性能不佳的一个主要因素是不存在 JIT 编译:除其他外,JIT 编译器可以消除很少使用的分支,从而显着提高性能。对于本机编译的代码,这显然是不可能的。

旁注:虽然我们讨论的是性能主题,但您可以执行由 clang 发出的位代码(即在 GraalVM 上执行C/C++程序),但根本不要指望“良好”的性能......

  • 一般来说,本机映像的峰值吞吐量不如在 JIT 模式下运行时那么大,尽管长期目标是改进 AOT 编译,使其与热身 JIT 相当。正如链接的图像所解释的那样,人们在谈到性能时会假设不同的事情,例如,较低的内存消耗可能会让您更好地扩展并实现更好的整体吞吐量。 (2认同)