Вопрос с собеседования · 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?
Разбор темы
- JIT, оптимизации и бенчмаркинг
Tiered compilation C1/C2, ключевые оптимизации JIT (inlining, escape analysis), деоптимизация и прогрев, корректные микробенчмарки на JMH.
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.