Бенчмаркінг секундоміра - це нормально, за умови достатньої міри ітерацій, щоб мати сенс. Як правило, мені потрібен загальний час, який минув деяку кількість однозначних секунд. В іншому випадку ваші результати легко суттєво перекосяться за допомогою планування та інших переривань O / S у вашому процесі.
Для цього я використовую невеликий набір статичних методів, побудованих давно, на яких базуються System.currentTimeMillis()
.
Для профілювання я використовував jProfiler протягом ряду років і вважав його дуже хорошим. Нещодавно я переглянув YourKit , що здається чудовим з Веб-сайту, але особисто я ним не користувався.
Щоб відповісти на питання про переривання планування, я вважаю, що повторювані прогони до досягнення послідовності / спостережуваних робіт на практиці викорінюють аномальні результати від планування процесу. Я також виявляю, що планування потоків не має практичного впливу для циклів від 5 до 30 секунд. Нарешті, після того, як ви пройдете декілька секунд, порогове планування має, на мій досвід, незначний вплив на результати - я виявляю, що 5-секундний пробіг постійно в середньому відповідає такому ж, як 5-хвилинний пробіг часу / ітерації.
Ви також можете розглянути можливість попереднього запуску тестованого коду приблизно 10 000 разів, щоб "розігріти" JIT, залежно від того, скільки разів ви очікуєте, що тестований код працюватиме з часом у реальному житті.