2015-02-24 2 views
1

Я бегу some benchmarks с JMH, и я получаю неустойчивые значения пропускной способности для каждой итерации, иногда +/- 50% разницы. (i7 4770K, Windows 7 x64, Java 1.8u31, JMH 0.9 - невозможно обновить). Тесты создают довольно много мусора из-за бокса и распаковки целых чисел и сильно используют синхронизированные блоки. Увеличение времени выполнения итерации от 1s до 5s приводит к меньшим отклонениям.JMH дает бесполезные значения пропускной способности

Мои вопросы:

  • Как я могу обнаружить источник этого различия?
  • Почему я иногда получаю значительно более высокие значения пропускной способности во время разминки?

ответ

0

Если вы можете использовать версию 0.9.1+, вы должны взглянуть на профилировщик perfasm, который был добавлен в JMH. Он позволяет отображать сборку вашего кода на время, затраченное на каждую инструкцию. Тем не менее, вам потребуется использовать ящик Linux, поскольку он использует команду perf.

Кроме этого, ваш тест позволяет довольно оптимизировать, но я предполагаю, что это предназначено. Вы не потребляете конечный результат черной дырой, но вы решили потреблять биты данных между некоторой обработкой. Этот подход довольно подвержен ошибкам, поэтому я бы рекомендовал вам действительно посмотреть на код сборки, который это передает независимо от того, что вы можете сказать, что на самом деле это то, что вы измеряете!

+0

Спасибо. Это было связано с несколькими факторами, действующими сразу: большими объемами скачкообразной перестройки ядра в бенчмарке, активности GC и ОС. – akarnokd

Смежные вопросы