Как замерить время выполнения программы 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» . Если вы еще не прочитали их, вы можете найти их полезными.

Читайте также:
Как подключить Wi-Fi программа

Пример программы 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() – как будто синхронизирует код с реальным секундомером. При запуске времени вы также можете указать Строку , которая будет использоваться в качестве имени или аннотации для связанной задачи. Это помогает дифференцировать их в результатах.

Читайте также:
Установка программ в linux с флешки

Задача – это просто период между вызовом 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