【问题标题】:most accurate time type in java?java中最准确的时间类型?
【发布时间】:2010-01-19 21:50:12
【问题描述】:

我想比较我的应用程序中某些操作的性能。

除了使用 Date 对象,还有什么更精确的吗?

【问题讨论】:

标签: java date


【解决方案1】:

public static long nanoTime() - 返回最精确的可用系统计时器的当前值,以纳秒为单位。

作为 Zach Scrivener states in his answer:

我的猜测是因为 System.nanoTime() 使用“最精确 可用的系统计时器”,显然只有 在您的系统上达到毫秒精度,没有比这更好的了。

【讨论】:

  • 不,它不仅具有毫秒精度。如果可能,他们会以更高的分辨率访问更准确的 Java 媒体计时器。
  • 纳米时间不是很精确,因为它不是每纳秒更新一次,就像@ThorstenS.提到的那样,它有大约毫秒的分辨率。就我而言,使用 currentTimeMillis() 是更好的选择,因为 nanoTime() 有奇怪的“滞后尖峰”。
【解决方案2】:

如果您通过减去两个时间戳来测量经过的时间,您应该使用System.nanoTime() 来获取这些时间戳。这就是它的用途。

【讨论】:

  • 纳米时间不是很精确,因为它不是每纳秒更新一次,就像@ThorstenS.提到的那样,它有大约毫秒的分辨率。就我而言,使用 currentTimeMillis() 是更好的选择,因为 nanoTime() 有奇怪的“滞后尖峰”。
【解决方案3】:

要获取 CPU 时间,您可以使用线程管理 Bean 的 getCurrentThreadCpuTime
它以纳秒为单位返回实际线程使用的 CPU 时间:

    ThreadMXBean threadMX = ManagementFactory.getThreadMXBean();
    long time = threadMX.getCurrentThreadCpuTime();

    // do something 

    time = threadMX.getCurrentThreadCpuTime() - time;  // CPU time in nanoseconds

查看documentation 了解详细信息以及未启用 CPU 时间测量等问题。

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多