1

计算正在运行的程序中两个步骤之间的时间(可能是最短单位)的方法是什么?

例如 :

algo() {
  long time_1 = time_X
  .
  .
  .
  long time_2 = time_Y

  difference = time_2 - time_1;
}

我一直在使用new GregorianCalendar().getTimeInMillis(). 但我得到的不同是0

有什么方法可以知道任何算法中某些步骤之间的区别吗?这里我想知道算法的第一步和最后一步的区别。就在算法将做出最终回报之前。

4

4 回答 4

10

对于毫秒,使用:System.currentTimeMillis()代替:

long time_1 = System.currentTimeMillis();
.
.
.
 long time_2 = System.currentTimeMillis();

并减去。对于纳秒精度,请使用nanoTime. nanoTime与内部定时器以外的任何系统时钟无关,因此对于 100 ns,它可以从 120 变为 220、从 100020 变为 100120 等。

于 2013-09-17T19:17:07.790 回答
1

简单的。

long time_1 = System.currentTimeMillis();
...
long time_2 = System.currentTimeMillis();
difference = time_1 - time_2;
System.out.println( difference + "milliseconds" );

对于评估函数所花费的时间非常有用。此外,如果您想以秒为单位获取时间,请将差值除以 1000。

于 2013-09-17T19:22:46.263 回答
0

如果您可以使用第三方库,您可能需要检查 Guava 的秒表。它可以以不同的粒度测量时间,并有助于以易于消化的格式显示结果。

于 2013-09-17T19:30:10.553 回答
0

System.nanoTime()System.currentTimeMillis()更精确。

当我需要一些时,这就是我用于计算时间的东西。

请随时查看官方 Java API 文档以获取详细信息。总结一下 :

优点

  • 以纳秒为单位的时间
  • 相当精确到毫秒

缺点

  • 在单个 JVM 运行时中具有实际意义(不要比较两个不同 JRE 或同一 JRE 的两个单独调用之间的 nanoTimes)
于 2013-09-17T19:46:18.130 回答