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

System.nanoTime()在机器休眠时是否停止计时?技术问题求助

机器休眠时System.nanoTime()停止计时引发的Bug

我正在追踪一个Bug:当机器进入深度休眠状态时,System.nanoTime()会停止计时,但System.currentTimeMillis()不受影响,两者的差值会随休眠时长增加。

以下是最小复现示例,代码会持续追踪System.currentTimeMillis()与System.nanoTime()转换为毫秒后的差值:

public static void main(String[] args) throws Exception {
    while (true) {
        long epoch = System.currentTimeMillis();
        System.out.println(new Date(epoch) + " " + 
                          (epoch - TimeUnit.NANOSECONDS.toMillis(System.nanoTime())));
        Thread.sleep(1000);
    }
}

我的运行环境:

  • MacBook Pro(macOS 15.5)
  • 通过SdkMan安装的Java 21.0.2-amzn

复现步骤:

  • 运行程序并让其循环一段时间
  • 点击苹果菜单选择“睡眠”使笔记本进入休眠模式
  • 等待一段时间后唤醒电脑
  • 检查输出的差值是否增加

示例输出显示,经过15秒休眠后,差值几乎增加了相同的时长:

...
Wed Jun 11 00:21:20 BRT 2025 1749394409334
Wed Jun 11 00:21:21 BRT 2025 1749394409334
Wed Jun 11 00:21:36 BRT 2025 1749394423732
Wed Jun 11 00:21:37 BRT 2025 1749394423732
...

根据Java官方文档描述:

返回值表示自某个固定但任意的起始时间以来的纳秒数[...]。同一Java虚拟机实例中所有调用此方法的地方都使用相同的起始点[...]

但实际测试情况与这段描述不符。有没有人遇到过该问题?我是否遗漏了什么细节?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:00:04