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

У меня есть программа, которую я сам написал в java, но я хочу проверить время выполнения метода и получить тайминги для определенных методов. Мне было интересно, возможно ли это, возможно, каким-то образом подключаемый модуль eclipse? или, возможно, вставить какой-то код? Я вижу, это довольно маленькая программа, не более 1500 строк, что было бы лучше выделенного инструмента или System.currentTimeMillis() ? Большое спасибо

KP65 31 март 2010, в 15:49
Поделиться
Pascal Thivent 31 март 2010, в 14:15
Используйте класс секундомера для этой задачи
Sumit Badaya 25 авг. 2016, в 08:44

Поделиться:
optimization

9 ответов

Лучший ответ

Помимо использования профилировщика, простой способ получить то, что вы хотите, это следующее:

public class SomeClass < public void somePublicMethod() < long startTime = System.currentTimeMillis(); someMethodWhichYouWantToProfile(); long endTime = System.currentTimeMillis(); System.out.println(«Total execution time: » + (endTime-startTime) + «ms»); >>
Chris Knight 31 март 2010, в 14:10
Поделиться
Chris Knight 31 март 2010, в 14:13

Я мог бы добавить к этому ответу, что вы могли бы принять во внимание разминку.

Как сделать таймер на Java за несколько минут!

Используя флаг -XX:CompileThreshold=100 вы заставляете JVM компилировать ваш метод в собственный код, когда он был выполнен 100 раз. Таким образом, вы можете выполнить его 100 раз без учета времени. После этого он был скомпилирован в нативный код, и вы можете правильно его измерить.

Christophe De Troyer 29 май 2014, в 13:56

Есть ли способ компенсировать время, необходимое для вызова метода? Например, я не хочу считать время, необходимое для копирования параметров, а также адрес возврата и т. Д.

Celeritas 29 май 2014, в 17:40

Это один из худших способов измерения времени выполнения небольших фрагментов кода в Java, потому что (i) не разогревает код, делая измерения настолько нестабильными, что вы не можете эффективно измерить ничего (ii) DCE может повлиять на это , CP и другие варианты, не представленные в реальном коде (iii), гранулярность по Миллису чрезвычайно грубая. Проверьте мой ответ для лучшего метода.

El Marce 16 авг. 2016, в 08:43
Visionary Software Solutions 06 фев. 2019, в 20:46
Показать ещё 3 комментария

Если узкое место достаточно велико, чтобы его можно было наблюдать с помощью профилировщика, используйте профилировщик.

Читайте также:
Программа регистрации действий пользователя

Если вам нужна более высокая точность, лучшим способом измерения небольшого фрагмента кода является использование инфраструктуры микрообъектов Java, например OpenJDK JMH или Google Caliper. Я считаю, что они так же просты в использовании, как JUnit, и не только вы получите более точные результаты, но вы получите опыт сообщества, чтобы сделать все правильно.

Выполняет микрозапись JMH для измерения времени выполнения Math.log() :

Использование currentMillis() и nanoTime() для измерения имеет множество ограничений:

  • У них есть латентность (они также требуют времени для выполнения), которые смещают ваши измерения.
  • У них ограниченная точность ОЧЕНЬ, это означает, что вы можете мешать вещам от 26 нс до 26 нс в Linux и 300 или около того в Windows описано здесь
  • Фаза прогрева не принимается во внимание, делая ваши измерения колеблющимися LOT.

Методы currentMillis() и nanoTime() в Java могут быть полезны, но должны использоваться с EXTREME CAUTION или вы можете получить неправильные ошибки измерений как это, где порядок измеренных фрагментов влияет на измерения или

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

Источник: overcoder.net

Время выполнения измерения в Java – пример Spring StopWatch

Есть два способа измерить истекшее время выполнения в Java , используя System.currentTimeinMillis () или System.nanoTime (). Эти два метода могут использоваться для измерения прошедшего времени или времени выполнения между двумя вызовами метода или событием в Java. Вычисление истекшего времени – одна из первых вещей, которую Java-программист делает, чтобы узнать, сколько секунд или миллисекунд занимает выполнение метода или сколько времени занимает конкретный блок кода. Большинство программистов на Java знакомы с System.currentTimeInMillis (), которая существует с самого начала, в то время как в Java 1.5 представлена ​​новая версия более точной утилиты измерения времени System.nanoTime, а также несколько новых функций в языке, таких как Generics , типы Enum , auto бокс и переменные аргументы или переменные . Вы можете использовать любой из них для измерения времени выполнения метода в Java. Хотя лучше использовать System.nanoTime () для более точного измерения временных интервалов.

В этом руководстве по Java-программированию мы увидим простую Java-программу для измерения времени выполнения с помощью System.nanoTime () и служебного класса StopWatch фреймворка Spring. Эта статья является продолжением моего поста, посвященного фундаментальным концепциям Java, таким как « Как сравнивать String в Java» , « Как правильно писать метод equals в Java» и « 4 способа зацикливания HashMap в Java» . Если вы еще не прочитали их, вы можете найти их полезными.

Читайте также:
Что такое программы сторожа

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

Вот пример кода для измерения прошедшего времени между двумя кодовыми блоками с использованием System.nanoTime, M любых библиотек Java с открытым исходным кодом, таких как Apache commons lang, Google commons и Spring, также предоставляет служебный класс StopWatch, который можно использовать для измерения прошедшего времени в Java . StopWatch улучшает читабельность, сводя к минимуму ошибки вычислений при расчете истекшего времени выполнения, но имейте в виду, что StopWatch не является поточно- ориентированным и не должен использоваться совместно в многопоточной среде, а в его документации четко сказано, что это больше подходит для разработки и тестирования, а не для базовых измерений производительности. выполнение расчета времени в производственной среде.

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

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

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

Вступление

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

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

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

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

Урок секундомера весны

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

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

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

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

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

Секундомер принадлежит к ядру util пакета Spring:

org.springframework spring-core

Естественно, он также присутствует в spring-boot-starter-web зависимости:

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

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

Читайте также:
Полная программа здоровья тенториум что включает в себя

Задача – это просто период между вызовом start() и stop () . Для каждой задачи, созданной при запуске секундомера , ее имя и время выполнения сохраняются в экземпляре 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() .

Вы также можете получить доступ к последней задаче секундомера через 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());

Теперь это приводит к:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Task 1 1008

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

// Naming this StopWatch instance 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);

Вывод

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

Читайте ещё по теме:

  • Интернационализация и локализация в Java 8
  • Отображение Всех Часовых Поясов С GMT И UTC на Java
  • Введение в SPF4J
  • Смещение зоны в Java
  • Как сравнить даты в Java
  • Преобразуйте входной поток в строку в Java
  • Как отфильтровать карту по ключу или значению в Java
  • Метки code, execution, look, time, tutorial

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

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