Небольшой поворот, если вы не используете инструментарий и хотите рассчитывать методы с малым временем выполнения: выполняйте его много раз, каждый раз удваивая число выполнений, пока не достигнете секунды, или около того. Таким образом, время обращения к System.nanoTime и т. Д., А также точность System.nanoTime не сильно влияют на результат.
int runs = 0, runsPerRound = 10;
long begin = System.nanoTime(), end;
do {
for (int i=0; i<runsPerRound; ++i) timedMethod();
end = System.nanoTime();
runs += runsPerRound;
runsPerRound *= 2;
} while (runs < Integer.MAX_VALUE / 2 && 1000000000L > end - begin);
System.out.println("Time for timedMethod() is " +
0.000000001 * (end-begin) / runs + " seconds");
Конечно, действуют предостережения относительно использования настенных часов: влияния JIT-компиляции, нескольких потоков / процессов и т. Д. Таким образом, сначала вам нужно сначала выполнить метод много раз, например JIT-компилятор выполняет свою работу, а затем повторяет этот тест несколько раз и принимает самое низкое время выполнения.