据我所知,JVM可以以不同的方式工作:
解释器:一遍又一遍地从字节码到本机代码的运行时转换。
及时编译:在需要时在运行时将字节码的部分编译为本机代码。保留汇编。性能开销/编译代价。引入了在运行时进行自适应优化的可能性,而静态提前编译则无法实现。
热点:仅对经常执行的部分进行JIT编译。其余的得到解释。
现在GraalVM可以将字节码提前编译为本地代码。
是否可以提前编译字节码并在热点上进行自适应优化(通常,特别是使用GraalVM)?
[澄清] 我不是要AOT将字节码的某些部分编译为本机代码,而将其他部分保留为字节码,以便在运行时对其进行热点JIT编译。到目前为止,我已经阅读了IBM Excelsior Jet Java的实现。 我的意思是AOT会编译整个字节码,并在运行时用自适应优化的热点重新编译来替换热点部分。这需要将优化的代码正确地连接/插入到现有的AOT编译代码中。 [/说明]
我不知道在运行时通过自适应优化重新编译热点需要什么信息。是否需要字节码?这意味着更高的内存消耗和更高的性能成本。
我不是专家,所以请告诉我是否有任何错误假设。