java - 我如何测量 Java 中耗时?

标签 java time

<分区>

我想要这样的东西:

public class Stream
{
    public startTime;
    public endTime;

    public getDuration()
    {
        return startTime - endTime;
    }
}

同样重要的是,例如,如果开始时间为 23:00,结束时间为 1:00,则持续时间为 2:00。

在 Java 中使用哪些类型来实现这一点?

最佳答案

不幸的是,到目前为止发布的十个答案中没有一个是完全正确的。

如果您要测量耗时,并且希望它正确,则必须使用 System.nanoTime()。你不能使用 System.currentTimeMillis(),除非你不介意你的结果是错误的。

nanoTime 的目的是测量经过的 时间,currentTimeMillis 的目的是测量挂钟 em>时间。您不能将其用于其他目的。原因是没有计算机的时钟是完美的;它总是漂移,偶尔需要纠正。这种更正可能是手动发生的,或者在大多数机器的情况下,有一个进程在运行并不断向系统时钟(“挂钟”)发出小的更正。这些往往会经常发生。每当有闰秒时,就会发生另一种此类修正。

由于 nanoTime 的目的是测量耗时,因此它不受任何这些小修正的影响。这是你想要使用的。当前使用 currentTimeMillis 进行的任何计时都将关闭 - 甚至可能是负数。

您可能会说,“这听起来好像真的没有那么重要”,我的回答是,也许不是,但总的来说,正确的代码不就是比不正确的代码好吗?此外,无论如何,nanoTime 都更短。

之前发布的关于 nanoTime 通常只有微秒精度的免责声明是有效的。此外,根据情况(其他情况也是如此),调用可能需要超过一微秒的时间,因此不要期望正确计时非常非常小的间隔。

关于java - 我如何测量 Java 中耗时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56155993/

相关文章:

java - 什么是NullPointerException,我该如何解决?

javascript - 如何在使用 reSTLet 时将时区更改为 netsuite 中的另一个时区

java - 使用 Joda-Time 获取日期的分钟数

javascript - 对于一段时间内未发送消息的已连接网络套接字,chrome 是否有超时?

Java:反向排序而不保持顺序

java - 如何检索我域中的所有用户

c++ - 测量 C++ OpenMP 代码中的执行时间

java - 不使用 java.util.Date 的 Java 中的纳秒级时间

java - 编译自定义 JSP 标记处理程序

java - 不知道我的代码有什么问题(Apache POI)