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

Мне нужно проанализировать сложность некоторых алгоритмов в Java. Для этого я планирую предоставить большое количество вкладов и измерить время, затраченное на реализацию Java. Каков наиболее точный и точный способ проверки времени между некоторыми строками кода? Мне нужна точность в миллисекундах...

Ответы

Ответ 2

Скажите, что у вас есть особый метод, который вы хотели бы поставить под микроскоп. Вы можете сделать это следующим образом:

long time1 = System.nanoTime();
thatMethod();
long time2 = System.nanoTime();
long timeTaken = time2 - time1;  
System.out.println("Time taken " + timeTaken + " ns");  

Компьютеры работают очень быстро, так что может случиться, что разница во времени при использовании getTimeMillis() может быть равна нулю. Следовательно, используйте nanoTime()

Вы также можете использовать Caliper. У них есть видео, чтобы начать. Кроме того, внимательно прочитайте ответ, на который указывает creichen. В нем много отличного материала.

Ответ 3

Используйте библиотеку, такую ​​как Speed4j. Это должно не только оценивать вызовы, но также предоставлять статистику в журналах, а также вы можете видеть их удаленно через JMX. Лучше использовать такую ​​библиотеку, а не размещать System.current.. вызывает по всему коду.

Ответ 4

Используйте System.nanoTime() или System.currentTimeMillis(), чтобы получить время начала и окончания вашего кода. Имейте в виду, что микро-тесты измеряют только основные аспекты производительности JVM. Помните о фазе прогрева для JVM, после чего запускается JIT.

Ответ 5

long startTime = System.currentTimeMillis();

//code lines whose time you want to calculate 

long endTime = System.currentTimeMillis();
System.out.println("Took "+(endTime - startTime) + " ms");

Ответ 6

long start =  System.currentTimeMillis();
// your code
long end = System.currentTimeMillis();
long diff = end-start;

или

long start =  System.nanoTime();
// your code
long end = System.nanoTime();
long diff = end-start;
long diffInMillis = diff/1000000;