Тестирование секундомера в порядке, если вы измеряете достаточно итераций, чтобы иметь смысл. Как правило, мне требуется общее прошедшее время, равное некоторому числу секунд, состоящих из одной цифры. В противном случае ваши результаты могут быть значительно искажены при планировании и других прерываниях O / S в вашем процессе.
Для этого я использую небольшой набор статических методов, которые я построил давным-давно, которые основаны на System.currentTimeMillis()
.
Для профилирования я несколько лет использовал jProfiler и нашел его очень хорошим. Недавно я просмотрел YourKit , который выглядит великолепно с веб-сайта, но я не использовал его вообще, лично.
Чтобы ответить на вопрос о прерываниях по расписанию, я обнаружил, что выполнение повторных прогонов до достижения согласованности / наблюдаемые работы на практике позволяют отсеять аномальные результаты планирования процессов. Я также обнаружил, что планирование потоков не оказывает практического влияния на периоды от 5 до 30 секунд. Наконец, после того, как вы пройдете, пороговое планирование в несколько секунд, по моему опыту, окажет незначительное влияние на результаты - я обнаружил, что 5-секундный прогон последовательно усредняется как 5-минутный прогон для времени / итерации.
Вы также можете рассмотреть возможность запуска тестируемого кода около 10 000 раз, чтобы «прогреть» JIT, в зависимости от того, сколько раз вы ожидаете, что тестируемый код будет выполняться в реальном времени с течением времени.