OpenJDK 64 位服务器 VM 警告:强制 TieredStopAtLevel 进行全面优化,因为启用了 JVMCI

OpenJDK 64-Bit Server VM warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled

我正在使用 Spring Boot,我刚刚从 OpenJDK 8 升级到 GraalVM GraalVM CE 20.1.0 (OpenJDK 20.0.7),以便我可以使用 Polyglot 功能。

我收到这条令人担忧的消息:

OpenJDK 64-Bit Server VM warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled

谁能给我解释一下它的意思,或者给我指点一个资源,让我可以阅读更多相关信息?是担心吗?

这是一个警告,所以并不重要。最多您将启用顶层优化编译器,这可能会出现 startup/warmup 次startup/warmup。

当您 运行 您的应用程序某些东西(也许是 docker 图像配置,也许您手动传递它)时,将 TieredStopAtLevel 选项传递给它。 很可能是 -XX:TieredStopAtLevel=1.

此选项将告诉 JVM 不要使用更高级的 JIT 编译层: 0 级 - 口译员 级别 1 - C1 完全优化(无分析) 级别 2 - 带有调用和后台计数器的 C1 级别 3 - 具有完整分析的 C1(级别 2 + MDO) 4 级 - C2

其中 C1 和 C2 是 OpenJDK 中包含的 JIT 编译器。

现在在 GraalVM 上,顶层 JIT(第 4 级)被 GraalVM 编译器取代,它使用 JVMCI 插入 JVM - JVM 编译器接口,专门为插入其他 JIT 编译器而创建。

当您 运行 GraalVM 的 java 时,它默认启用 JVMCI 以便能够使用 GraalVM JIT 编译器。

如果您停在第 1 层,这没有多大意义,因为您将无法到达同样启用的 JVMCI。但我认为这是一个错误,如果你能重现,请提交给https://github.com/oracle/graal

我尝试使用基于 JDK8 的 GraalVM 20.1.0 CE(因为你提到了 OpenJDK 8):

❯ java -XX:TieredStopAtLevel=1 -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 25.252-b09-jvmci-20.1-b02, mixed mode)

并且它不打印警告,可能是 OS 或其他一些因素在起作用。

当你运行申请IDEA时,运行配置有一个按钮是“启用启动优化”。如果你启用它,可能会打印这个警告。