首页 > 解决方案 > GraalVM 可以将提前编译与自适应优化结合起来吗?

问题描述

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

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

即时编译:需要时在运行时将部分字节码编译为本机代码。保留汇编。编译的性能开销/惩罚。引入了在运行时进行自适应优化的可能性,这在静态提前编译中是不可能的。

热点:只有经常执行的部分才会被 JIT 编译。其余的被解释。

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

是否可以提前编译字节码并对热点进行自适应优化(一般来说,特别是 GraalVM)?

【澄清】我并不是说将部分字节码AOT编译为native code,而将其他部分作为字节码在运行时对其进行热点JIT编译。这就是我目前所读到的 IBM 的 Excelsior Jet Java 实现似乎要做的事情。我的意思是 AOT 编译整个字节码并在运行时用自适应优化的热点重新编译替换热点部分。这需要将优化的代码正确连接/插入到现有的 AOT 编译代码中。[/澄清]

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

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

标签: optimizationjvmjvm-hotspotaotgraalvm

解决方案


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


推荐阅读