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

开启NVIDIA G-SYNC时JavaFX窗口卡顿帧率低问题求解

运行环境与问题现象
  • 运行环境:Windows 10 系统、GTX 980Ti 显卡、JDK 18 版本
  • 问题表现:开发的无动画简单JavaFX UI,在开启窗口化应用NVIDIA G-SYNC功能、且JavaFX窗口处于聚焦状态时,整个显示器范围内的鼠标移动都会出现卡顿,经FRAPS检测,该场景下窗口帧率仅约2fps
  • 临时触发的缓解效果:手动触发窗口重绘时卡顿会暂时消失,比如选中文本、调整窗口大小的操作过程中,窗口帧率会提升至显示器原生刷新率(120fps),鼠标移动恢复流畅
已测试的临时规避方案

1. AnimationTimer强制触发重绘

通过AnimationTimer在窗口聚焦时持续触发组件重绘,可以让窗口稳定跑满120fps,但会带来额外的CPU开销,实现代码如下:

private boolean focus = false;

public void setStageAndSetupListeners(Stage stage) {
    stage.focusedProperty().addListener((ov, onHidden, onShown) -> focus = ov.getValue());

    AnimationTimer timer = new AnimationTimer() {
        @Override
        public void handle(long now) {
            if (focus) {
                label.setVisible(false);
                label.setVisible(true);
            }
        }
    };
    timer.start();
}

2. 启用软件渲染

添加JVM启动参数-Dprism.order=sw强制使用软件渲染管线,该方案存在明显缺陷:运行时会出现字体显示错乱的问题。

3. 强制启用上传渲染器

添加JVM启动参数-Dprism.forceUploadingPainter=true,实际使用时表现正常无异常,但官方明确标注该参数仅用于测试场景,不推荐在生产环境使用。

核心诉求
  • 最优方案:让JavaFX应用和普通桌面应用表现一致,既不产生额外的不必要CPU消耗,也不会触发G-SYNC下的卡顿问题
  • 次优方案:实现G-SYNC开启状态的检测逻辑,能够按需启用上述临时规避方案,尽量降低额外开销
其他说明

该问题已经提交至OpenJDK缺陷追踪系统,对应缺陷编号为JDK-8289505。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:36:47