У меня есть программа, которую я сам написал в 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