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

Можно воспользоваться более короткой формой записи с анонимным классом для создания экземпляра класса, реализующего интерфейс Runnable с помощью декларирования класса прямо в теле метода:

Или еще более короткой формой записи с помощью лямбда выражения

public static void main(String[] args) < Timer timer = new Timer(); long time = timer.measureTime(() ->new BigDecimal(«1234567»).pow(100_000)); System.out.println(time); >
public class Timer < public long measureTime(Runnable runnable) < long startTime = System.currentTimeMillis(); runnable.run(); return System.currentTimeMillis() — startTime; >public static void main(String[] args) < Timer timer = new Timer(); long time = timer.measureTime(() ->new BigDecimal(«1234567»).pow(100_000)); System.out.println(time); > >

Источник: pc-zver.ru

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

Я запускаю метод много раз, регистрирую результаты и затем сообщаю о среднем и дисперсии времени работы в микросекундах.

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

Вот проблема, я получил следующие значения (существуют очень большие пики)

обратите внимание, что другие значения не являются нулями (увеличение показывает это)

Мои вопросы:

  1. Какова основная причина этих выбросов (шипы)?
  2. Как точно сообщить время работы в таком случае?

Взгляните на тело метода (для любопытных)

TraceRecord resultRecord = new TraceRecord(); resultRecord.setTimeStamp(timeStamp); resultRecord.setUserID(userID); if (sensorValue.getSensorType() == SensorType.WIFI) < ArrayListwifiAPsInRange = new ArrayList(); for (int i = 0; i < sensorValue.getBaseStationsIdentifiers().length; i++) < WifiBaseStation wifiAP = new WifiBaseStation(sensorValue.getRepresentativeName(i), sensorValue.getBaseStationsIdentifier(i)); wifiAP.getSignalStrengthsList().add(sensorValue.getSignalValue(i)); wifiAPsInRange.add(wifiAP); >if (wifiAPsInRange.size() > 0) < double averageLong = 0; double averageLat = 0; int matchedCount = 0; for (WifiBaseStation bs : wifiAPsInRange) < WifiBaseStation bsFromTable = WiFiUniqueWarDrivingTable.Get(bs.getMacAddress()); if (bsFromTable != null) < GPSLocation locationFromTable = bsFromTable.getBaseStationLocationUsingAverage(); if (locationFromTable != null) < averageLong += locationFromTable.getLongitude(); averageLat += locationFromTable.getLatitude(); matchedCount++; >else < averageLong++; averageLong—; >>else < averageLong++; averageLong—; >> if (averageLong != 0) < averageLong /= matchedCount; >if (averageLat != 0) < averageLat /= matchedCount; >if (averageLat != 0 averageLong != 0) < resultRecord.setLocationPoint(new GPSLocation(averageLong, averageLat, 0)); >else < return null; >> >
user586557 24 мар ’14 в 16:37 2014-03-24 16:37
2014-03-24 16:37

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

4 ответа

Наиболее вероятной причиной этих всплесков являются разрывы «останови мир», вызванные GC. Вы ничего не можете сделать, чтобы этого не случилось. Лучше всего вызвать System.gc() один раз перед первым измерением.

Java. Работа с датой и временем.

user3361467 24 мар ’14 в 16:46 2014-03-24 16:46
2014-03-24 16:46

Попытка измерить промежутки времени в микросекундном диапазоне трудна (или практически невозможна). Разрешение таймера, используемого в System.nanoTime() Вызов ограничен и зависит от операционной системы (более подробную информацию можно легко найти, например, в System.currentTimeMillis против System.nanoTime)

Кроме того, могут быть произвольные помехи, начиная от тех, которые связаны с JVM (а именно, запуска сборки мусора), до сгенерированных пользователем (некоторый дополнительный поток, который вы выполняете где-то еще в вашей программе), до «внешние», такие как ваш почтовый клиент, открывающий окно «У вас есть почта», или задержка, вызванная MP3-плеером, который работает в фоновом режиме, как развлечение во время скучного, скучного теста производительности;-)

Профилировщик, очевидно, является первым выбором для выявления узких мест в сложной системе. И в этом случае профилировщик может быть полезен для «увеличения» метода: любой вызов метода, выполняемый этим методом, может быть причиной «всплесков». Например, звонок как sensorValue.getSignalValue(i) или же bs.getMacAddress() может сделать какой-то странный доступ к аппаратным прерываниям через собственную библиотеку. или может случайно запустить «MineSweeper» в фоновом режиме, кто знает.

Интересным вопросом также будет то, что вы на самом деле хотите измерить. Учитывая вопрос, это может звучать наивно, но: почему шипы имеют значение? Является ли сам спайк действительно проблемой или просто артефактом, который привлекает ваше любопытство? Я не могу себе представить, что на практике имеет значение, является ли время выполнения этого метода для 100 вызовов 100x1ms или 99x1ms+1x2ms. Если это предназначено для какого-то «микробенчмаркинга», вы должны по крайней мере вычислить среднее время для более чем 100 вызовов в любом случае (и предпочтительно использовать структуру микробенчмаркинга).

Читайте также:
Программа которая вырезает видео

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

Как использовать Spring Framework StopWatch () для регистрации ExecutionTime и ElapseTime любого потока Java

Spring Framework — StopWatch() это очень удобная утилита для любого Java-разработчика, если у вас есть небольшое Java-приложение или готовое к работе приложение. Большинство приложений Java используют пул потоков или одновременный вызов нескольких заданий одновременно.

Есть вопросы ниже?

  • Как измерить время выполнения в Java
  • Как измерить прошедшее время с помощью Spring StopWatch

Тогда вы находитесь в правильном месте. В этом уроке мы расскажем о том, как измерить и сообщить время, затраченное каждым потоком или методами Java.

Давайте начнем:

StopWatch — это простой секундомер, позволяющий рассчитывать время выполнения ряда задач, отображая общее время выполнения и время выполнения для каждой названной задачи.

Для запуска этой программы вам понадобится ядро Spring MVC с зависимостью Maven.

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

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