【问题标题】:Why is Graals AOT compiler slower than JIT?为什么 Graals AOT 编译器比 JIT 慢?
【发布时间】:2019-01-02 18:33:42
【问题描述】:

一般来说,当开发人员试图解释为什么(高度优化的)C++ 比 Java 快 2 倍时,他们提到一个因素是 C++ AOT 编译比 JIT 有更多的时间来进行广泛的优化。所以我假设 Graal 中的 AOT 编译会有类似的机会,因此即使它不如 C++ 快,但它至少会比 JIT 编译快——然而,情况似乎并非如此。这是为什么?特别是,是否存在 Graal 的 AOT 编译器会更快的特定场景?相反,是否存在 JIT 比 GRAAL AOTr 更快的情况? (这样,一旦我完全构建了我的解决方案,我就可以就它的有用性做出明智的决定)?

【问题讨论】:

  • “它至少会比 JIT 编译快——但是,情况似乎并非如此。”,如果你能提供你的源代码就好了那个。

标签: graalvm


【解决方案1】:

一个因素是 C++ AOT 编译比 JIT 有更多的时间进行广泛的优化。

这不是一个真正的问题。 JIT 可以根据需要花费尽可能长的时间进行优化,并且还可以进行多次增量编译运行。这可以在后台线程中完成。

真正归结为:信息。高度调整的 C++ 速度很快,因为编写它的开发人员使用了所有可用信息来优化代码。这意味着能够做出更多假设或做出巧妙的优化技巧,而 C++ 语言允许您调整所有优化旋钮。

JIT 当然是最好的,但它不一定包含开发人员应该拥有的特定代码段的所有信息,因为它是一个更通用的优化器。在某些情况下,JIT 还具有编译器内在函数,它们基本上是某些方法和代码模式的手动调整替换。同样,这是开发人员利用对特定情况的高级知识进行优化。

但是,对于普通的 Java AOT,情况恰恰相反;由于 AOT 编译器在程序执行之前运行,因此它较少了解有关程序运行环境的信息,也没有分析信息,因此它无法进行良好的优化。

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2018-01-23
    • 2023-04-02
    • 2018-09-23
    • 2011-11-27
    • 2017-03-13
    • 2020-06-20
    • 2020-04-14
    • 2011-02-23
    相关资源
    最近更新 更多