java - 如何使用 currentTimeMillis() 方法获取小部分执行时间

标签 java performance optimization 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;

即使它返回时间,它也会返回 30 或 40。但是,我需要一个更精确的数字,例如 30.00012。另外,方法返回类型是long,但我将其更改为double,因为我想要 float ,这有什么坏处吗?你能告诉我正确的方法来测量我的java方法执行挂钟时间的小分数(例如不是8.0而是8.287335)

最佳答案

I am aware of two methods I can use: currentTimeMillis() and nanoTime(). But I have learned that currentTimeMillis() 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/

相关文章:

javascript - Java - 使用 Selenium 等待 JavaScript 事件(例如 onchange)完成

mysql - 查询 firebird slow order by/distinct

将方程式转换为位移运算

python - Python 中 3-D 点之间的最小、平均和最大距离

javascript - 如何将自定义 header 从 JavaScript WebSocket 客户端发送到服务器?

java - JPA 是适合这种场景的 ORM 吗?

c# - SQL - 更好的两个查询而不是一个大查询

javascript - 为什么使用 && 的条件语句速度快两倍

javascript - 独立延迟加载图像(不基于框架)

java - Sonar 4.5.1 中是否已弃用 Xpath 规则