【问题标题】:Does GraalVM native image increase overall application performance or just reduce startup times?GraalVM 原生镜像是提高整体应用程序性能还是只是减少启动时间?
【发布时间】:2019-12-26 12:41:16
【问题描述】:

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

那么我可以通过这样做真正期待什么?

【问题讨论】:

    标签: java graalvm


    【解决方案1】:

    一般来说,性能下降。我报告了原生图像some time ago to the GraalVM team 的性能下降。性能下降的严重程度可能因用例而异。在我有written and used for my analysis 的基准测试中(代码的更新版本可以在here 找到),开销从“几乎不明显”到“慢5 倍”不等。我也在我的talk at JCON 2019 (#shamelessSelfPromotion) 中简短地提到了这一点。

    GraalVM 团队提供了一张漂亮的幻灯片,说明了在哪个用例中使用什么技术: (图片取自tweet by Thomas Würthinger

    对于感兴趣的读者:正如Andrew mentioned on github,性能不佳的一个主要因素是不存在 JIT 编译:JIT 编译器可以消除不常用的分支,从而显着加快速度表现。这对于本地编译的代码显然是不可能的。

    旁注:当我们讨论性能时,您可以执行由 clang 发出的位码(即在 GraalVM 上执行 C/C++ 程序),但不要期望“良好”的性能。 . ?

    【讨论】:

    • 一般来说,原生镜像的峰值吞吐量不如在 JIT 模式下运行时那么大,尽管长期目标是改进 AOT 编译,使其与预热的 JIT 相当。正如链接的图片所解释的那样,人们在谈到性能时会假设不同的事情,例如 - 较低的内存消耗可能会让您更好地扩展并实现更好的整体吞吐量。
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多