【发布时间】:2017-03-08 02:26:19
【问题描述】:
我所读到的有关 currentTimeMillis 与 nanoTime 的所有内容似乎都只关注准确性。如果我只查找以毫秒为单位的经过时间,如果我想要获得最佳性能,我应该使用其中哪一个?
似乎 currentTimeMillis 将是答案,因为我不需要将最终答案从 ns 转换为 ms,但这是从我的应用程序的角度来看,而幕后发生的事情可能使其成为错误的选择,即我为什么要问。
【问题讨论】:
-
我个人只使用#currentTimeMillis,你很少需要纳秒精度,除非你已经在那个规模上工作(例如,如果你正在检查10 秒,3 到 5 毫秒的误差不会杀死你,即使误差可能要小得多)。虽然 iirc #currentTimeMillis 比较可能会变为负数,但同样,除非你在那个规模上工作(例如,10 毫秒的时间间隔)
-
nanoTime 与 currentTimeMillis 一样准确(在最坏的情况下),如果不是更好的话——就精度而言。至于哪个更快,我的理解你需要更清楚一点。
-
NTP、用户、闰秒和其他来源会在某些情况下直接更改
currentTimeMillis的值,从而使您的测量完全错误。如果你能忍受,那就去吧。否则请使用 nanoTime,这是一个严格单调的计数器,这也是您应该将 nanoTime 用于任何严肃应用的原因。
标签: java performance date time elapsed