Вопрос-ответ

How do I time a method's execution in Java?

Как мне определить время выполнения метода в Java?

  1. Как мне узнать время выполнения метода?

  2. Существует ли Timer служебный класс для таких вещей, как определение времени выполнения задачи и т.д.?

Большинство поисковых запросов в Google возвращают результаты для таймеров, которые планируют потоки и задачи, а это не то, что я хочу.

Переведено автоматически
Ответ 1

Всегда есть старомодный способ:

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

long duration = (endTime - startTime); //divide by 1000000 to get milliseconds.
Ответ 2

Я выбираю простой ответ. У меня работает.

long startTime = System.currentTimeMillis();

doReallyLongThing();

long endTime = System.currentTimeMillis();

System.out.println("That took " + (endTime - startTime) + " milliseconds");

Это работает довольно хорошо. Очевидно, что разрешение составляет всего миллисекунду, вы можете добиться большего с помощью System.nanoTime(). Существуют некоторые ограничения для обоих (фрагменты расписания операционной системы и т.д.), Но это работает довольно хорошо.

Усредните за пару запусков (чем больше, тем лучше), и вы получите неплохую идею.

Ответ 3

Давайте, ребята! Никто не упомянул способ сделать это с помощью Guava (который, возможно, потрясающий):

import com.google.common.base.Stopwatch;

Stopwatch timer = Stopwatch.createStarted();
//method invocation
LOG.info("Method took: " + timer.stop());

Приятно то, что Stopwatch .toString() хорошо справляется с выбором единиц измерения времени. Т.е. Если значение маленькое, оно выдаст 38 нс, если оно длинное, оно покажет 5 м 3 с

Еще лучше:

Stopwatch timer = Stopwatch.createUnstarted();
for (...) {
timer.start();
methodToTrackTimeFor();
timer.stop();
methodNotToTrackTimeFor();
}
LOG.info("Method took: " + timer);

Примечание: для Google Guava требуется Java 1.6+

Ответ 4

Используя Instant и Duration из нового API Java 8,

Instant start = Instant.now();
Thread.sleep(5000);
Instant end = Instant.now();
System.out.println(Duration.between(start, end));

выходные данные,

PT5S
java