GraalVM是否可以将提前编译与自适应优化相结合?

时间:2019-05-02 17:33:38

标签: optimization jvm jvm-hotspot aot graalvm

据我所知,JVM可以以不同的方式工作:

解释器:一遍又一遍地从字节码到本机代码的运行时转换。

及时编译:在需要时在运行时将字节码的部分编译为本机代码。保留汇编。性能开销/编译代价。引入了在运行时进行自适应优化的可能性,而静态提前编译则无法实现。

热点:仅对经常执行的部分进行JIT编译。其余的得到解释。

现在GraalVM可以将字节码提前编译为本地代码。

是否可以提前编译字节码并在热点上进行自适应优化(通常,特别是使用GraalVM)?

[澄清] 我不是要AOT将字节码的某些部分编译为本机代码,而将其他部分保留为字节码,以便在运行时对其进行热点JIT编译。到目前为止,我已经阅读了IBM Excelsior Jet Java的实现。 我的意思是AOT会编译整个字节码,并在运行时用自适应优化的热点重新编译来替换热点部分。这需要将优化的代码正确地连接/插入到现有的AOT编译代码中。 [/说明]

我不知道在运行时通过自适应优化重新编译热点需要什么信息。是否需要字节码?这意味着更高的内存消耗和更高的性能成本。

我不是专家,所以请告诉我是否有任何错误假设。

1 个答案:

答案 0 :(得分:0)

请参阅JEP 295。它提到了不同的AOT模式,包括分层的AoT,该AoT提供带有配置文件的C1编译代码,然后可以在运行时使用C2进行优化。