You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GraalVM 21运行JavaFX应用启用分代ZGC出现JVMCI不支持警告原因

问题背景

环境信息

  • OS:MacOS 12.7.3(intel)
  • JDK:
    openjdk version "21.0.2" 2024-01-16
    OpenJDK Runtime Environment GraalVM CE 21.0.2+13.1 (build 21.0.2+13->jvmci-23.1-b30)
    OpenJDK 64-Bit Server VM GraalVM CE 21.0.2+13.1 (build 21.0.2+13->jvmci-23.1-b30, mixed mode, sharing)
    
  • JavaFX版本:21.0.2
  • javafx-maven-plugin版本:0.0.8
  • javafx.staticSdk版本:21-ea+11.1

插件配置

使用javafx-maven-plugin运行JavaFX应用的配置(包含自定义JVM参数):

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>${javafx-maven-plugin.version}</version>
    <executions>
        <execution>
            <!-- Default configuration for running with: mvn clean javafx:run -->
            <id>default-cli</id>
            <configuration>
                <mainClass>${mainClass}</mainClass>
                <launcher>app</launcher>
                <jlinkZipName>app</jlinkZipName>
                <jlinkImageName>app</jlinkImageName>
                <noManPages>true</noManPages>
                <stripDebug>true</stripDebug>
                <noHeaderFiles>true</noHeaderFiles>
                <options>
                    <option>-XX:+UseZGC</option>
                    <option>-XX:+ZGenerational</option>
                </options>
            </configuration>
        </execution>
    </executions>
</plugin>

运行警告

启用分代ZGC后,执行mvn clean javafx:run时出现如下警告:

[INFO] <<< javafx-maven-plugin:0.0.8:run (default-cli) < process-classes @ jfxdemo <<<
[INFO] 
[INFO] 
[INFO] --- javafx-maven-plugin:0.0.8:run (default-cli) @ jfxdemo ---
[0.004s][warning][gc,jvmci] Setting EnableJVMCI to false as selected GC does not support JVMCI: z gc

疑问

该警告是什么含义?是否意味着应用无法被Graal优化?


解答

警告含义

这个警告的核心意思是:你启用的ZGC(包括分代ZGC)目前不支持JVMCI(Java虚拟机编译器接口),JVM自动将EnableJVMCI参数设置为false。而JVMCI是Graal编译器和HotSpot JVM之间的交互桥梁,没有它,Graal的即时编译(JIT)功能就无法启动。

是否失去Graal优化?

是的——当EnableJVMCI被禁用后,Graal JIT编译器无法工作,应用会自动切换到HotSpot的默认C2编译器,无法享受Graal带来的编译优化。

不过有个例外:如果你的目标是用GraalVM构建原生镜像(Native Image),这个警告完全不影响。因为原生镜像的编译是在构建阶段完成的,和JVM运行时的JVMCI、GC选择无关,原生镜像依然能获得Graal的优化。但如果是在标准JVM模式下运行应用,启用ZGC就会失去Graal JIT的优化能力。

可选处理方案

  1. 更换GC:放弃ZGC,改用支持JVMCI的垃圾回收器(比如G1GC、Shenandoah),这样就能正常启用Graal JIT优化。
  2. 保留ZGC:接受使用HotSpot默认编译器,继续享受ZGC的低延迟特性。
  3. 原生镜像场景:直接忽略该警告,不影响原生镜像的构建和运行优化。

内容的提问来源于stack exchange,提问作者BreakingGood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:31:26