Как измерить время работы программы java

Зачастую требуется узнать, сколько времени выполняется тот или иной код. Иногда требуется замерить время выполнения метода или какой-то задачи. В данной статье мы расскажем вам принципы замера времени в Java и покажем лучшие практики для конкретных задач.

Замер времени с помощью currentTimeMills()

Это довольно простой способ измерить время. Метод System.currentTimeMillis() вернёт вам текущее время в миллисекундах. Его потребуется вызвать до выполнения нужной задачи и после, а затем вычислить разницу. В итоге мы узнаем время выполнения в миллисекундах:

long start = System.currentTimeMillis(); // выполнение какой-то логики Thread.sleep(1000); long finish = System.currentTimeMillis(); long elapsed = finish — start; System.out.println(«Прошло времени, мс: » + elapsed);

При работе с данным методом следует учитывать его специфику: System.currentTimeMillis() показывает текущее время, основываясь на системных часах и может выдавать некорректный результат.

Замер времени с помощью nanoTime()

Ещё один метод для получения текущего времени это System.nanoTime(). Как следует из названия, этот метод возвращает время с точностью до нансекунд. Также работа этого метода не зависит от системных часов.

Как измерить время выполнения кода | Изучение С++ для начинающих. Урок #145

Он используется аналогично:

long start = System.nanoTime(); // выполнение какой-то логики Thread.sleep(1000); long finish = System.nanoTime(); long elapsed = finish — start; System.out.println(«Прошло времени, нс: » + elapsed);

Для получения значения в миллисекундах результат можно разделить на 1000:

System.out.println(«Прошло времени, мс: » + elapsed / 1000000);

Важно: Хотя метод nanoTime() может возвращать время в наносекундах, он не гарантирует, что значения между его вызовами будут обновляться с точностью до наносекунд.

Читайте также:
Как удалить программу плагин

Но всё же это более приемлемый вариант, чем System.currentTimeMillis().

Замер времени с помощью Instant и Duration

В Java 8 добавили новый java.time API. В частности, ля измерения времени подойдут два новых класса – Instant и Duration. Оба эти класса иммутабельны.

Instant обозначает момент времени с начала эпохи Unix (1970-01-01T00:00:00Z). Для создания момента мы используем метод Instant.now(). После того, как мы создали два момент, вычислим разницу в миллисекундах:

Instant start = Instant.now(); // выполнение какой-то логики Thread.sleep(1000); Instant finish = Instant.now(); long elapsed = Duration.between(start, finish).toMillis(); System.out.println(«Прошло времени, мс: » + elapsed);

Рекомендуется использовать именно этот подход в Java 8 и выше.

Замер времени выполнения с помощью StopWatch

StopWatch – это класс из библиотеки Apache Commons Lang. Он работает как секундомер. Для его использования сначала требуется подключить библиотеку к проекту:

org.apache.commons commons-lang3 3.9

Теперь создадим экземпляр StopWatch. Затем начнём отсчёт с помощью метода start() и окончим отсчёт с помощью метода stop():

Ответы на вопросы 3: Замер времени исполнения программы.


public static void stopWatch() throws InterruptedException < StopWatch stopWatch = new StopWatch(); stopWatch.start(); // выполнение какой-то логики Thread.sleep(1000); stopWatch.stop(); System.out.println(«Прошло времени, мс: » + stopWatch.getTime()); >

StopWatch удобно использовать тогда, когда в проекте уже подключена данная библиотека.

Исходный код

package ru.javalessons.time; import org.apache.commons.lang3.time.StopWatch; import java.time.Duration; import java.time.Instant; public class MeasureElapsedTime < public static void main(String[] args) throws InterruptedException < currentTimeMillis(); nanoTime(); instant(); stopWatch(); >public static void currentTimeMillis() throws InterruptedException < long start = System.currentTimeMillis(); // выполнение какой-то логики Thread.sleep(1000); long finish = System.currentTimeMillis(); long elapsed = finish — start; System.out.println(«Прошло времени, мс: » + elapsed); >public static void nanoTime() throws InterruptedException < long start = System.nanoTime(); // выполнение какой-то логики Thread.sleep(1000); long finish = System.nanoTime(); long elapsed = finish — start; System.out.println(«Прошло времени, нс: » + elapsed); >public static void instant() throws InterruptedException < Instant start = Instant.now(); // выполнение какой-то логики Thread.sleep(1000); Instant finish = Instant.now(); long elapsed = Duration.between(start, finish).toMillis(); System.out.println(«Прошло времени, мс: » + elapsed); >public static void stopWatch() throws InterruptedException < StopWatch stopWatch = new StopWatch(); stopWatch.start(); // выполнение какой-то логики Thread.sleep(1000); stopWatch.stop(); System.out.println(«Прошло времени, мс: » + stopWatch.getTime()); >>

Читайте также:
Примеры программ pascalabc net

Заключение

В данной статье мы разобрали простые методы замера времени выполнения в Java. Для простых замеров можно использовать все вышеперечисленные методы, кроме currentTimeMillis (из-за того, что он зависит от системных часов).

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

  • ← Как заменить пробелы между словами в строке
  • Как узнать версию OpenSSH →

Источник: java-lessons.ru

⏱ Измеряем время выполнения кода в Java с помощью StopWatch

⏱ Измеряем время выполнения кода в Java с помощью StopWatch

Чтобы написать хорошее приложение, важно измерять время выполнения кода. Так вы сможете планировать ваши дальнейшие действия, учитывая время.

В многопоточных системах также полезно измерять время выполнения отдельных потоков ( Thread ) или асинхронных задач.

Поскольку в Java нет встроенного способа измерения времени выполнения строчного кода, мы использовали инструмент StopWatch .

В этом уроке мы рассмотрим, как измерить время выполнения кода на Java с помощью StopWatch.

Что такое StopWatch?

StopWatch – это служебный класс, находящийся в пакете util . У него очень простой API, он даёт нам возможность определять время выполнения отдельных задач, групп задач и общее время выполнения программы.

Этот класс обычно используется для проверки производительности кода на этапе разработки.

Примечание: StopWatch непотокобезопасен.

Он отслеживает время в наносекундах, полагаясь на System.nanoTime() .

Измеряем время выполнения кода с помощью StopWatch

Секундомер относится к базовому пакету утилит Spring:

org.springframework spring-core

Также он есть в spring-boot-starter-web :

org.springframework.boot spring-boot-starter-web

API StopWatch сводится к созданию экземпляра и вызову start() и stop() : так он синхронизирует код с реальным секундомером. При синхронизации вы также можете указать строку, которая будет использоваться в качестве имени или аннотации для связанной задачи. Это помогает дифференцировать их результаты.

Задача – это период между вызовом start() и stop() . Для каждой задачи, созданной при запуске StopWatch , её имя и время выполнения сохраняются в экземпляре TaskInfo и добавляются в список задач.

Создадим задачу с именем и измерим время выполнения части кода:

Читайте также:
Безопасный режим как запустить программу

StopWatch timeMeasure = new StopWatch(); timeMeasure.start(«Task 1»); Thread.sleep(1000); timeMeasure.stop(); System.out.println(«Last task time in Millis: » + timeMeasure.getLastTaskMillis());
Last task time in Millis: 1009

Вы можете получить доступ к сумме всех задач с помощью функций getTotalTimeSeconds() , getTotalTimeMillis() и getTotalTimeNanos() .

Вы также можете получить доступ к последней задаче StopWatch через getLastTaskInfo() , который выводит экземпляр TaskInfo . Этот экземпляр содержит информацию о последней задаче, например, имя и сколько времени она заняла в секундах, миллисекундах и наносекундах:

StopWatch stopWatch = new StopWatch(); stopWatch.start(«Task 1»); Thread.sleep(1000); stopWatch.stop(); System.out.println(stopWatch.getLastTaskInfo().getTaskName()); System.out.println(stopWatch.getLastTaskInfo().getTimeMillis());
Task 1 1008

При решении нескольких задач удобно использовать метод prettyPrint() , который печатает все записи в табличном виде с простым форматированием:

StopWatch stopWatch = new StopWatch(«Measure Code Execution»); stopWatch.start(«1. Task»); Thread.sleep(2000); stopWatch.stop(); stopWatch.start(«2. Task»); Thread.sleep(5000); stopWatch.stop(); stopWatch.start(«3. Task»); Thread.sleep(3000); stopWatch.stop(); System.out.println(stopWatch.prettyPrint());
StopWatch ‘Measure Code Execution’: running time = 10012348500 ns ——————————————— ns % Task name ——————————————— 2002729600 020% 1. Task 5006985700 050% 2. Task 3002633200 030% 3. Task

Примечание: если мы используем секундомер для измерения времени выполнения кода для большого количества интервалов (порядка сотен тысяч или миллионов) – список TaskInfo займёт значительную часть вашей памяти. Вы можете отключить его так:

stopWatch.setKeepTaskList(false);

Заключение

В этом уроке мы рассмотрели класс утилиты StopWatch – ответ Spring на отсутствие инструментов измерения времени в Java.

Источник: uproger.com

Измерьте прошедшее время (или время выполнения) в Java

В этом посте будет обсуждаться, как измерить прошедшее время в Java, используя System.nanoTime() , System.currentTimeMillis() , Instant.now() а также StopWatch предоставлено Guava и Apache Commons Lang.

1. Использование System.nanoTime() метод

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru