точно способ измерения производительности отдельных методов изнутри Java?

Я хотел бы измерить время выполнения набора модульных тестов, чтобы иметь возможность автоматически отслеживать и сравнивать производительность при внесении изменений. Есть ли подходящие счетчики производительности, которые можно легко получить из самой Java? То есть, что-то вроде:

count1 = <call performance counter func>
executeUnitTest();
count2 = <call performance counter func>
testPerformance = count2 - count1;

с этими дополнительными требованиями:

  • дает тот же ответ независимо от нагрузки на систему, даже если средство запуска тестов запущено в виртуальной гостевой ОС (это, кажется, дисквалифицирует nanoTime () и его друзей, или даже время ЦП текущего потока из-за различной нагрузки на хост-машину)
  • дает одинаковый ответ независимо от того, на каком оборудовании он запущен (подсчет количества выполненных инструкций байт-кода был бы отличным!)
  • в идеале может разделять выполнение GC отсчет от фактического выполнения метода (в случае, если сборщик мусора выполняется в потоке)
6
задан mikewse 6 August 2011 в 00:12
поделиться