不同平台下java.time.Instant.now()返回值差异及原因咨询
你观察到的现象是Windows和类Unix系统的系统时钟服务底层实现差异导致的,和你的机器性能没有直接关联。
平台时钟分辨率核心差异
- Windows 系统默认的全局时钟 tick 间隔为10~15.6ms,系统时间只会在每个tick到来时更新一次。如果两次
Instant.now()调用的间隔短于这个tick间隔,就会返回完全相同的时间戳。这个是Windows内核设计的固有特性,目的是降低时钟中断带来的功耗和性能开销。 - MacOS、Linux 主流发行版默认开启高精度定时器(HRTimer)支持,时钟分辨率可以达到纳秒级,只要两次时间获取操作不在同一个CPU指令周期内执行,基本都能获取到严格递增的时间戳。
- WSL2 运行在Linux内核之上,使用的是Linux的时钟实现,所以表现和原生Linux一致,和执行速度减慢无关。
补充说明
即便在类Unix平台下,这类依赖两次连续时间戳调用存在差值的测试也不是100%稳定的:如果 updateObject 的执行耗时足够短,理论上依然有概率出现 after 和 obj.UpdatedTime 相等的情况,只是触发概率远低于Windows平台。
内容的提问来源于stack exchange,提问作者OneRaccoonToRuleThemAll
相关产品推荐
相关产品推荐

