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

可能重复:
如何在Java中计算方法的执行时间?

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

我怎样才能做到这一点?

6 Solutions collect form web for “如何计算我的程序的运行时间?”

使用currentTimeMillis()获取当前时间。

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

这里有一个简短的教程,以防您需要比这更先进的东西: http : //java.sun.com/docs/books/performance/1st_edition/html/JPMeasurement.fm.html

在主要方法的开始处,添加下面这行代码:

 final long startTime = System.nanoTime(); 

然后,在主要方法的最后一行,可以添加:

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

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

 System.out.println(duration); 

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

使用系统。 currentTimeMillis ()或System。 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"); 

请注意,通常使用纳秒来计算非常短而精确的程序执行,如unit testing和基准testing。 因此,对于整体程序执行,毫秒是优选的。

一般的做法是:

  1. main()的开始处说明你的基准testing的开始时间。
  2. 运行你的代码。
  3. main()的末尾说出你的基准testing结束的时间。
  4. 从结束时间减去开始时间,并转换成适当的单位。

一个提示,看看System.getCurrentTimeMillis()System.nanoTime()

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

温应用程序启动:

 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() ,还有一个叫做perf4j的整洁的库,这当然也是有用的,这当然也取决于你的目的。

  • Firefox如何优化这个循环?
  • 在JavaScript中声明多个variables
  • 斯卡拉懒惰的val的(隐藏)成本是多less?
  • 最好的方式来压力testing一个网站
  • DBMS_OUTPUT.PUT_LINE
  • 迪斯尼的FastPass有效和/或有用的排队理论
  • 进行JNI调用的数量开销是多less?
  • 什么是你最喜欢的分析工具(对于C ++)
  • arrayfun可以明显慢于matlab中的显式循环。 为什么?
  • 我应该为业务层使用EJB3还是Spring?
  • 在Java中有效地计算两个集合的交集?