我的JVM有-server选项,我相信它启用了JVM使用C2编译器,该编译器专为运行时间较长的服务器应用程序而设计。然而,GRAAL JIT(通过-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler启用)旨在替换C2,并且即使我给出以下两个选项,我的JVM也会启动。
-server -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler
它最终使用哪个编译器?Graal JIT还是C2?
-server
选择的是 VM 而不是编译器。现在,服务器 VM 默认使用分层 C1 + C2 编译(但实际上您可以让它仅使用 C1 或 C2)。UseJVMCICompiler
是服务器 VM 中可用的选项,它使其使用 JVMCI API 实现的编译器来替换 C2。 - Gilles D.