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

Sum*_*lar 7 java time

我有一个简单的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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

icz*_*cza 12

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

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

例:

long startTime = System.nanoTime();
// do something you want to measure
long elapsedTimeNs = System.nanoTime() - startTime;
Run Code Online (Sandbox Code Playgroud)

  • 计时器测量外部("墙")时间.如果您想要可重复的结果,请运行您的测试,而不用其他任何竞争资源. (2认同)