是System.currentTimeMillis的()的在Java中时间的表现是最好的措施? 是否有使用这个时所采取的操作后采取行动的时间之前进行比较的时候任何疑难杂症的? 有没有更好的选择?
Answer 1:
我希望不是-这是我用什么,当我不使用nanoTime()
Answer 2:
除了System.nanoTime()
,JMX可能是最佳可行的办法:
java.lang.management.ManagementFactory.getThreadMXBean()
可以查询当前线程的CPU时间(以纳秒但不与纳米秒的精度测量,为System.nanoTime
())
Answer 3:
您可以使用秒表,从谷歌番石榴这使得测量时间无比轻松。
Answer 4:
看看这个:
如何时间的方法在Java执行?
Answer 5:
如果您需要单调的时间测量,System.nanoTime是一个更好的选择。 System.currentTimeMillis的受UTC定时变化 - 闰秒,NTP更新和抖动,以及用户设置系统时钟*。 这可能会导致某些种类的定时应用的一些壮观的失败。 System.nanoTime被认为是免疫一切。
与System.nanoTime的问题包括定期数值溢出和长期的时间误差,使得System.currentTimeMillis的更长的时间跨度更好(前提是用户独自离开系统时钟)。 需要注意的是夏令时和时区的变化不应该影响System.currentTimeMillis的。
* Windows的“同步与Internet时间”,使逐步变化。 这可能是非常具有破坏性的,而不是一个适当的NTP客户端实现,通过调整客户端时基频“追逐”的服务器。
Answer 6:
Java 1.5中之前,只有有System.currentTimeMillis的。 然而该值的粒度取决于底层操作系统上并且可以是大的。 在Windows XP中我有时也结束了20毫秒的差距。 我听说Linux是在1-2MS的范围差距的方式更好。
在Java 1.5,你也可以使用System.nanoTime。 我从来没有与这一个问题。
Answer 7:
有一个问题是,这种经过测量,而不是CPU时间实时 - 所以这是非常依赖于系统的负荷。 这是好的,如果你原本免费的机器上,但如果其他进程正在试图做的工作,有时会产生有趣的结果。
这篇文章有野趣解决问题的办法。