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

时间:2011-03-05 13:22:22

标签: java performance

  

可能重复:
  How do I time a method's execution in Java?

我写了一个程序,现在我想从头到尾计算程序的总运行时间。

我该怎么做?

6 个答案:

答案 0 :(得分:219)

使用System.nanoTime获取当前时间。

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

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

答案 1 :(得分:40)

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

final long startTime = System.nanoTime();

然后,在main方法的最后一行,您可以添加:

final long duration = System.nanoTime() - startTime;

duration现在包含程序运行的时间(以纳秒为单位)。例如,您可以像这样打印此值:

System.out.println(duration);

如果要以秒为单位显示持续时间,则必须将值除以1'000'000'000。或者,如果您想要Date对象:Date myTime = new Date(duration / 1000);您可以访问Date的各种方法来打印分钟数,小时数等。

答案 2 :(得分:19)

如果您想要更精确的阅读,请使用系统。currentTimeMillis()或系统。nanoTime()。通常,如果您需要将值输出给用户,则毫秒足够精确。此外,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");

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

答案 3 :(得分:4)

对此的一般方法是:

  1. 在基准测试开始时获取时间,比如main()
  2. 的开头
  3. 运行您的代码。
  4. 在基准测试结束时获取时间,比如main()
  5. 从结束时间中减去开始时间并转换为适当的单位。
  6. 提示:查看System.nanoTime()System.currentTimeMillis()

答案 4 :(得分:2)

您需要获取应用程序启动的时间,并将其与应用程序结束的时间进行比较。

文应用开始​​了:

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();

答案 5 :(得分:2)

除了众所周知的(已经提到的)System.currentTimeMillis()System.nanoTime()之外,还有一个名为perf4j的简洁图书馆也可能有用,具体取决于您的目的。< / p>