Wil*_*m A 0 java optimization performance execution-time elapsedtime
我需要在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;
Run Code Online (Sandbox Code Playgroud)
即使它返回时间,它也会返回30或40.但是,我需要一个更准确的数字,比如30.00012.此外,方法返回类型是long但我改为它,double因为我想要一个浮点数,这有什么害处?你能告诉我以正确的方式测量我的java方法执行挂钟时间的小分数(例如不是8.0而是8.287335)
我知道我可以使用两种方法:
currentTimeMillis()和nanoTime().但是我已经知道,currentTimeMillis()如果我需要挂钟时间,那就更准确了(就好像我从挂钟测量执行花了多少时间.而不是处理时间).
这只是部分准确.
这两个函数都返回挂钟时间,而不是CPU时间.
除精度之外的差异currentTimeMillis()是相对于众所周知的时间点而言,而是nanoTime()相对于某个任意时间点.这意味着您无法轻松将结果nanoTime()转换为您和我理解的时间戳.
您仍然可以使用它来测量挂钟时间间隔:只需调用nanoTime()两次即可.这几乎就是它的设计目标.
最后,如果您使用它来分析一些代码,请阅读如何在Java中编写正确的微基准测试?有很多细微之处.