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

为何Instant.now()在Unix机器上的精度远高于Windows机器?

为何Instant.now()在Unix机器上的精度远高于Windows机器?

嘿,我之前特意做了个小测试,想搞明白不同系统上Instant.now()的精度差异到底咋回事,先给你看看我写的超简单测试代码——就是死循环打印当前的Instant时间:

public class Test {    
    private static final Logger logger = LogManager.getLogger(Test.class.getName());     

    public static void main(String... args) {         
        while (true) {             
            logger.info(Instant.now());         
        }     
    } 
}

当我在一台跑Windows 11的Intel Core i9笔记本上跑这个代码时,结果很明显:大部分日志行打印的时间戳完全一模一样,要隔好一会儿才会跳一次。

这背后其实是系统底层时钟API的差异在搞鬼:

  • 咱们常用的Unix/Linux类系统,默认用的都是高精度的时钟源,比如CLOCK_MONOTONIC_RAW或者CLOCK_REALTIME,这些时钟源的更新频率能到纳秒级。Java的Instant.now()在Unix平台上会直接调用这些高精度接口,所以你能拿到非常细粒度的时间,看起来精度就高很多。
  • 而Windows这边呢,传统的系统时钟滴答间隔大概是10-15毫秒,早期的系统时间API(比如GetSystemTimeAsFileTime)就受这个限制。虽然现在Windows也有了像QueryPerformanceCounter这样的高精度接口,但Java的Instant.now()在Windows平台上默认还是调用旧的系统时钟接口,所以你才会看到大量重复的时间戳,感觉精度特别低。

备注:内容来源于stack exchange,提问作者mchen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:44:32