计算Java程序的执行时间

时间:2014-02-23 06:10:18

标签: java

我想计算我的Java程序的执行时间,我很困惑我应该怎么做。我知道可以使用System.nanoTime()& System.currentTimeInMillis(),但是这种方法没有考虑操作系统的基础调度机制。

例如:假设有3个进程同时运行(假设它是单个核心系统)

流程A

进程B(我的Java代码 - 在JVM进程中运行)

流程C

现在,如果进程B在上午11:00开始执行并在上午11:02完成执行,则System.nanoTime()& System.currentTimeInMillis()将报告所用的时间为2分钟。但是,过程B可能不会在整个2分钟的持续时间内运行,因为操作系统将安排另外2个进程,并且它们将在2分钟的时间间隔内运行一段时间。所以从本质上讲,java程序运行时间不到2分钟。

有没有办法确定Java程序本身完成执行所花费的确切时间? 注意:

  1. 我们可以多次运行代码并花费平均时间来最小化这种情况的影响,但是知道是否有一些可靠的方法来计算执行时间仍然是好的

  2. 让我们假设我们需要时间的代码部分不能分解成更小的块并且需要花费大量时间来处理。

2 个答案:

答案 0 :(得分:5)

如果您使用的是Java 8,那么它具有Instant类,它代表时间线上的瞬时点。该类在时间线上模拟单个瞬时点。这可用于将应用程序中的事件时间戳记录为:

    Instant start = Instant.now();
    try {
        Thread.sleep(7000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Instant end = Instant.now();
    System.out.println(Duration.between(start, end));
}

并打印:PT7.001S

答案 1 :(得分:3)

旧的时尚方式是......将其分解为方法

long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();

long duration = endTime - startTime;