gpt4 book ai didi

java - nanoTime 和 currentTimeMillis 在 Mac OS 上有不同的速率

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:06 25 4
gpt4 key购买 nike

我正在尝试使用 System.nanoTime()System.currentTimeMillis() 测量某个时期的持续时间。周期越长,我从两次测量中获得的差异就越大。

这是一个演示问题的小片段:

public class TimeTest {

public static void main(String[] args) throws Exception {
long startNanos = System.nanoTime();
long startMillis = System.currentTimeMillis();

while (true) {
long nowNanos = System.nanoTime();
long nowMillis = System.currentTimeMillis();

System.out.println((nowMillis - startMillis) - (nowNanos - startNanos) / 1000000);

Thread.sleep(100);
}
}
}

在带有 jdk 1.8.0_74 的 Mac OS 上运行时,有一个明显的趋势,即值每分钟减少约 2 毫秒。 IE。一开始我只看到 0 和 1,但 10 分钟后出现了大约 -20 的值。

我设法仅在使用 jdk8 的 mac 上观察到这种行为,无法在同时使用 jdk 7 和 8 的 linux 和 windows 上重现它。

那么,问题是:谁在说谎?我知道应该首选 nanoTime() 来测量持续时间。但在这种情况下,我不确定这是真的。

有人可以详细说明这个话题吗?

最佳答案

如果您使用的是 NTP,则很可能您的 currentTimeMillis 已被更正,因此它最有可能是正确的。 nanoTime() 基于时钟周期/时钟频率。如果此频率略微偏离它测量的频率,您将看到持续漂移。这不应基于 Java 版本,而应基于操作系统和硬件。

关于java - nanoTime 和 currentTimeMillis 在 Mac OS 上有不同的速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com