Измерение времени выполнения метода в 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() подходит для простых учебных замеров.