我需要获取 Java 中函数的执行时间。我知道可以使用两种方法:
currentTimeMillis();
和 nanoTime();
但我了解到,如果我需要挂钟时间,currentTimeMillis();
更准确(即,就好像我正在从挂钟测量执行花费了多少时间。而不是处理时间)。
但是currentTimeMillis();
不能给我小分数。例如,如果执行时间小于 1 毫秒,则返回 0。即使它小于 1,例如 0.05 毫秒,我也需要该时间。这是方法返回 0 时的简单示例。
long startTime=System.currentTimeMillis();
for(int x=0; x<10;x++)
{
System.out.println("-");
}
long execTime=System.currentTimeMillis() - startTime;
即使它返回时间,它也会返回 30 或 40。但是,我需要一个更精确的数字,例如 30.00012。另外,方法返回类型是long
,但我将其更改为double
,因为我想要 float ,这有什么坏处吗?你能告诉我正确的方法来测量我的java方法执行挂钟时间的小分数(例如不是8.0而是8.287335)
最佳答案
I am aware of two methods I can use:
currentTimeMillis()
andnanoTime()
. But I have learned thatcurrentTimeMillis()
is more accurate if I need the wall-clock time (i.e, as if I am measuring from the wall-clock how much time the execution took. Not the processing time).
这只是部分准确。
这两个函数都返回挂钟时间,而不是 CPU 时间。
除了精度之外,不同之处在于 currentTimeMillis()
是相对于众所周知的时间点,而 nanoTime()
是相对于某个任意点及时。这意味着您无法轻松地将 nanoTime()
的结果转换为您和我都能理解的时间戳。
您仍然可以使用它来测量挂钟间隔:只需调用 nanoTime()
两次并取差值。这几乎就是它的设计目的。
最后,如果您使用它来分析一些代码,请阅读 How do I write a correct micro-benchmark in Java?有很多微妙之处。
关于java - 如何使用 currentTimeMillis() 方法获取小部分执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173414/