Ответ 1
Вы можете получить разрешение наносекунд, даже используя System.nanoTime()
.
Однако вы можете рассмотреть следующие пункты:
Мне нужно проанализировать сложность некоторых алгоритмов в Java. Для этого я планирую предоставить большое количество вкладов и измерить время, затраченное на реализацию Java. Каков наиболее точный и точный способ проверки времени между некоторыми строками кода? Мне нужна точность в миллисекундах...
Вы можете получить разрешение наносекунд, даже используя System.nanoTime()
.
Однако вы можете рассмотреть следующие пункты:
Скажите, что у вас есть особый метод, который вы хотели бы поставить под микроскоп. Вы можете сделать это следующим образом:
long time1 = System.nanoTime();
thatMethod();
long time2 = System.nanoTime();
long timeTaken = time2 - time1;
System.out.println("Time taken " + timeTaken + " ns");
Компьютеры работают очень быстро, так что может случиться, что разница во времени при использовании getTimeMillis()
может быть равна нулю. Следовательно, используйте nanoTime()
Вы также можете использовать Caliper
. У них есть видео, чтобы начать. Кроме того, внимательно прочитайте ответ, на который указывает creichen
. В нем много отличного материала.
Используйте библиотеку, такую как Speed4j. Это должно не только оценивать вызовы, но также предоставлять статистику в журналах, а также вы можете видеть их удаленно через JMX. Лучше использовать такую библиотеку, а не размещать System.current.. вызывает по всему коду.
Используйте System.nanoTime()
или System.currentTimeMillis()
, чтобы получить время начала и окончания вашего кода. Имейте в виду, что микро-тесты измеряют только основные аспекты производительности JVM. Помните о фазе прогрева для JVM, после чего запускается JIT.
long startTime = System.currentTimeMillis();
//code lines whose time you want to calculate
long endTime = System.currentTimeMillis();
System.out.println("Took "+(endTime - startTime) + " ms");
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;