System.nanoTimeSystem.currentTimeMillis = 107(应该为1e6吗?)

System.nanoTimeSystem.currentTimeMillis = 107(应该为1e6吗?),第1张

System.nanoTime / System.currentTimeMillis = 107(应该为1e6吗?)

System.nanoTime()
有一个任意的起点;这不是unix时代。从Javadoc:

自某个固定但任意的原始时间以来,返回的值表示纳秒

因此,您实际计算的是:

(unknownOffset + offsetFromEpochInNanos) / offsetFromEpochInMillis

除非

unknownOffset
碰巧为零,否则几乎肯定不会是1e6 。

如果您可以通过减去两次来消除未知偏移的影响,则可以看到该比率约为1e6:

long nanoStart = System.nanoTime();long milliStart = System.currentTimeMillis();Thread.sleep(2000);long nanoEnd = System.nanoTime();long milliEnd = System.currentTimeMillis();;long nanoDelta = nanoEnd - nanoStart;long milliDelta = milliEnd - milliStart;System.out.println((double) nanoDelta / milliDelta);

输出(运行5次):

1000058.37251000045.4705999549.15792103951000046.1011000038.1045

Ideone demo

因此,非常接近1e6。

请注意, 可能 不是这样,因为

System.currentTimeMillis()
由于时钟偏斜的校正而无法顺利进行。但是,这些应该很少出现,因此在
大多数情况下, 运行此代码时,您会看到大约1e6。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4989801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存