Java 如何计算我的程序的运行时间?

Java 如何计算我的程序的运行时间?,java,performance,Java,Performance,我写了一个程序,现在我想计算我的程序从开始到结束的总运行时间 如何执行此操作?用于获取当前时间 long startTime = System.nanoTime(); .....your program.... long endTime = System.nanoTime(); long totalTime = endTime - startTime; System.out.println(totalTime); 上面的代码以纳秒为单位打印程序的运行时间。在主方法的开头,添加以下代码行:

我写了一个程序,现在我想计算我的程序从开始到结束的总运行时间

如何执行此操作?

用于获取当前时间

long startTime = System.nanoTime();
.....your program....
long endTime   = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);

上面的代码以纳秒为单位打印程序的运行时间。

在主方法的开头,添加以下代码行:

final long startTime = System.nanoTime();
然后,在主方法的最后一行,您可以添加:

final long duration = System.nanoTime() - startTime;
duration
现在包含程序运行的时间(以纳秒为单位)。例如,可以按如下方式打印此值:

System.out.println(duration);
如果要以秒为单位显示持续时间,则必须将该值除以1'000'000'000。或者如果您想要一个
Date
对象:
datemytime=新日期(持续时间/1000)
然后,您可以访问
日期的各种方法来打印分钟数、小时数等。

如果您想要更精确的读数,请使用System.()或System.()。通常,如果需要将值输出给用户,毫秒就足够精确了。此外,
System.nanoTime()
可能返回负值,因此,如果使用该方法,则返回值可能不正确

一般和广泛的用途是使用毫秒:

long start = System.currentTimeMillis();

... 


long end = System.currentTimeMillis();

NumberFormat formatter = new DecimalFormat("#0.00000");
System.out.print("Execution time is " + formatter.format((end - start) / 1000d) + " seconds");

请注意,纳秒通常用于计算非常短且精确的程序执行,例如单元测试和基准测试。因此,对于整个程序的执行,毫秒是最好的。

通常的方法是:

  • 获取基准测试开始时的时间,比如在
    main()
    的开始处
  • 运行你的代码
  • 获取基准测试结束时的时间,比如在
    main()
    的末尾
  • 从结束时间中减去开始时间,并转换为适当的单位

  • 提示:查看
    System.nanoTime()
    System.currentTimeMillis()
    您需要获取应用程序启动的时间,并将其与应用程序结束的时间进行比较

    当应用程序启动时:

    Calendar calendar = Calendar.getInstance();
    
    // Get start time (this needs to be a global variable).
    Date startDate = calendar.getTime();
    
    当应用程序结束时

    Calendar calendar = Calendar.getInstance();
    
    // Get start time (this needs to be a global variable).
    Date endDate = calendar.getTime();
    
    要获得差异(以毫秒为单位),请执行以下操作:

    long sumDate = endDate.getTime() - startDate.getTime();
    

    除了众所周知(并且已经提到)的
    System.currentTimeMillis()
    System.nanoTime()
    之外,还有一个名为的整洁库,它可能也很有用,当然这取决于你的目的。

    使用日期和日历以毫秒为单位获得持续时间对我来说似乎有点“过分”了,System.currentTimeMillis()将是更好的选择。如果您复制main方法中的所有行,日历将被定义两次->编译错误作为附加说明:从1.5开始,您可以使用java.util.concurrent.TimeUnit轻松地从毫秒(特别是纳秒)转换为其他单位;系统输出打印项次(总时间);如果使用segsthanks@snakile.com,那么如果该方法涉及大量db事务,是否准确?System.nanoTime()更准确。参见krtek的帖子@感觉很好,这已经过时了。更好的答案,所以,这应该被删除。尤其是因为它不妨碍手动计算单位换算。@anon58192932,谢谢。我已经更新了答案,以避免误导到达答案的人。谢谢@krtek。如果该方法涉及大量的db事务,是否准确?对
    nanoTime
    的两次调用之间发生的事情绝对没有影响。
    long seconds=TimeUnit.NANOSECONDS.toSeconds(after-before)注意System.currentTimeMillis()受系统时钟变化的影响,而System.nanoTime()则不受影响。因此,如果NTP将系统时钟延迟5分钟,则system.currentTimeMills()的结果可能为55分钟,而system.nanoTime()的结果可能为60分钟。很好的库,但大约8年后就没有更新过。