-server -XX:+ UnlockExperimentalVMOptions -XX:+ EnableJVMCI -XX:+ UseJVMCICompiler时使用哪个编译器

Sag*_*gar 5 java jvm java-9 graalvm java-11

我的JVM有-server选择,我相信它使JVM能够使用C2编译器,该编译器旨在用于服务器应用程序,该服务器应用程序的运行时间通常比客户端运行时间更长。但是,GRAAL JIT(由启用-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler)旨在替换C2,即使我同时提供以下两个选项,我的JVM也会启动。

-server -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler

最终使用哪个编译器?JIT还是C2?

Eug*_*ene 7

-server只是被忽略了,例如阅读这个答案。你可以做的是运行一些额外的命令:

 java -XX:+UnlockExperimentalVMOptions 
      -XX:+EnableJVMCI 
      -XX:+UseJVMCICompiler  
      -Dgraal.ShowConfiguration=info  // this
      -XX:+EagerJVMCI  // and this matters
Run Code Online (Sandbox Code Playgroud)

结果将包含:

Using Graal compiler configuration 'community' ..... 
Run Code Online (Sandbox Code Playgroud)

  • @Sagar 代码首先以解释模式启动,一旦代码变得“更热”,就会触发 5 层 iirc。好吧,graal 仅在第一次撕裂时才延迟加载,因此除非您调用某些使用 graal 编译的方法(并且隐式地对其进行了初始化),否则您将看不到任何内容。该标志使其初始化急切 (3认同)