Измерение времени выполнения метода в Java — System.nanoTime

Иногда нужно понять, насколько быстро работает наш метод. В Java для этого удобно использовать System.nanoTime() — он возвращает текущее значение времени работающей JVM в наносекундах.

Пример 1: программа для измерения времени выполнения метода

class Main {

  // create a method
  public void display() {
    System.out.println("Calculating Method execution time:");
  }

  // main method
  public static void main(String[] args) {

    // create an object of the Main class
    Main obj = new Main();

    // get the start time
    long start = System.nanoTime();

    // call the method
    obj.display();

    // get the end time
    long end = System.nanoTime();

    // execution time
    long execution = end - start;
    System.out.println("Execution time: " + execution + " nanoseconds");
  }
}

Вывод:

Calculating Method execution time:
Execution time: 656100 nanoseconds

В примере выше мы создали метод display(), который печатает одно предложение в консоль. Программа замеряет время выполнения этого метода.

Здесь мы использовали метод nanoTime() класса System. Метод nanoTime() возвращает текущее значение времени работающей JVM в наносекундах.

Пример 2: замер времени выполнения рекурсивного метода

class Main {

  // create a recursive method
  public int factorial( int n ) {
    if (n != 0)  // termination condition
        return n * factorial(n-1); // recursive call
    else
        return 1;
}

  // main method
  public static void main(String[] args) {

    // create object of Main class
    Main obj = new Main();

    // get the start time
    long start = System.nanoTime();

    // call the method
    obj.factorial(128);

    // get the end time
    long end = System.nanoTime();

    // execution time in seconds
    long execution = (end - start);
    System.out.println("Execution time of Recursive Method is");
    System.out.println(execution + " nanoseconds");
  }
}

Вывод:

Execution time of Recursive Method is
18600 nanoseconds

В примере выше мы измеряем время выполнения рекурсивного метода factorial().

Примечание

Конкретные числа времени выполнения у вас почти наверняка будут другими — они зависят от мощности процессора, текущей загрузки системы и состояния JVM. Это нормально. Для серьёзных бенчмарков используют специальные библиотеки (например, JMH), а nanoTime() подходит для простых учебных замеров.