繁体   English   中英

使用System.currentTimeMillis()测量时间差

[英]Measuring time differences using System.currentTimeMillis()

我有一个简单的java程序,我想知道一些操作之间的时差。 对于这个问题,细节并不重要,但让我们采取以下方案。

long beginTime = System.currentTimeMillis();

//Some operations. Let us asssume some database operations etc. which are time consuming.

//

long endTime = System.currentTimeMillis();

long difference = endTime - beginTime;

当代码在机器上运行时,差异有多可靠?

让我们说,处理器开始从我的代码中执行一些指令,然后将上下文提供给另一个进程,该进程执行一段时间,然后返回执行与此java进程相关的指令。

那么,时差应该取决于我的机器的当前状态,即运行了多少个进程等? 因此,在运行某些操作所需的分析时间内,这种机制不可靠吗?

System.currentTimeMillis()的粒度取决于实现和操作系统,通常约为10毫秒。

而是使用System.nanoTime()返回最精确的可用系统计时器的当前值,以纳秒为单位。 请注意,您只能使用它来计算经过的时间,您不能将其值用作绝对时间。

例:

long startTime = System.nanoTime();
// do something you want to measure
long elapsedTimeNs = System.nanoTime() - startTime;

我认为你的代码会做得很好,因为在几个项目中都使用了相同的代码。 我不认为如果你的代码调用其他数据库进程等,那么它对你的时间有任何影响。 在这种情况下它应该可以正常工作。

防爆。

Main Process Started
long beginTime = System.currentTimeMillis();
.
.
.
Called another process (DB or command etc) -> (Another Process start)
                                               .
<Now in this time main process is waiting>     .
                                               .
                                               .
Returned from process                      <- (Another Process end)
.
.
long endTime = System.currentTimeMillis();
long difference = endTime - beginTime;

现在,这个差异将是主要过程所花费的总时间,包括另一个过程所花费的时间。 这个时间是参考主要过程的机器而且很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM