正在运行的程序中计算两个步骤之间的时间(可能是最短单位)的方法是什么?
例如:
algo() {
long time_1 = time_X
.
.
.
long time_2 = time_Y
difference = time_2 - time_1;
}
我一直在使用new GregorianCalendar().getTimeInMillis()
进行计算.但我得到的区别是0
.
有什么方法可以知道任何算法中某些步骤之间的差异吗?在这里,我想知道算法的第一步和最后一步之间的区别。就在算法将最终返回之前。
对于毫秒,请改用: System.currentTimeMillis()
:
long time_1 = System.currentTimeMillis();
.
.
.
long time_2 = System.currentTimeMillis();
并减去。对于纳秒级精度,请使用 nanoTime
。 nanoTime
与内部计时器以外的任何系统时钟无关,因此对于 100 ns,它可以从 120 到 220,从 100020 到 100120,等等。
很简单。
long time_1 = System.currentTimeMillis();
...
long time_2 = System.currentTimeMillis();
difference = time_1 - time_2;
System.out.println( difference + "milliseconds" );
对于评估函数所花费的时间非常有用。 此外,如果您想以秒为单位获得时间,请将差除以 1000。
您可能需要检查 Guava 的秒表是否可以使用第三方库。它可以以不同的粒度测量时间,并有助于以易于消化的格式显示结果。
System.nanoTime() 比 System.currentTimeMillis() 更精确。
这就是我在需要时用于计算时间的方法。
请随时查看官方 Java API 文档以了解详细信息。总结一下:
优点 :
- 时间(纳秒)
- 相当精确到毫秒
缺点 :
- 在单个 JVM 运行时中具有真正的意义(不要比较两个不同 JRE 之间的 nanoTimes 或同一 JRE 的两个单独调用)