Вопрос с собеседования · Java

Какой инструмент обычно используют для корректных Java microbenchmarks?

MiddleJIT и производительность
Коротко

JMH (Java Microbenchmark Harness) от разработчиков OpenJDK: учитывает прогрев, форки JVM, устранение мёртвого кода, свёртку констант, статистику по итерациям.

  • @Benchmark, @State, @Warmup, @Fork
  • Blackhole потребляет результат, чтобы JIT его не выбросил
  • Профилировщики: -prof gc, -prof async

А ещё Сравнивать варианты под одной нагрузкой, смотреть на погрешность

Подробно

JMH учитывает warmup, forks, dead-code elimination и другие эффекты JVM/JIT. Наивное измерение одного вызова часто даёт мусор.

Что хотят услышать

  • Название.
  • Какие проблемы JMH решает.

Частые ошибки

  • Мерить холодный код без warmup.
  • Не защищаться от оптимизации неиспользуемого результата.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗System.currentTimeMillis() вокруг одного вызова
  • ✓JMH
  • ✗Thread.sleep()
  • ✗javap

Что спросят дальше

  • Зачем нужен warmup?
  • Что такое dead-code elimination?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования