Spring boot OpenJDK 64位服务器VM警告:由于启用了JVMCI,因此强制TieredStopAtLevel进行完全优化

Spring boot OpenJDK 64位服务器VM警告:由于启用了JVMCI,因此强制TieredStopAtLevel进行完全优化,spring-boot,graalvm,Spring Boot,Graalvm,我使用的是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 有人能给我解释一下这意味着什么,或者给我指一个资源,让我可以阅读更多关于

我使用的是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

有人能给我解释一下这意味着什么,或者给我指一个资源,让我可以阅读更多关于它的信息吗?这是值得关注的吗?

这是一个警告,所以不重要。最多您将启用顶层优化编译器,这可能需要更长的启动/预热时间

当您运行应用程序时(可能是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,JVM编译器接口是专门为插入其他JIT编译器而创建的

运行GraalVM的
java
时,默认情况下,JVMCI能够使用GraalVM JIT编译器

如果您停在第1层,这没有多大意义,因为您将无法到达JVMCI,JVMCI也已启用。但我认为这是一个错误,如果你能复制,请你提交给

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


它不会打印警告,可能是操作系统或其他因素造成的。

运行IDEA应用程序时,运行配置时有一个按钮是“启用lanunch优化”。如果启用它,可能会打印此警告

❯ 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)