Оптимизация Hotspot JIT

в лекции о JIT в Hotspot я хочу привести как можно больше примеров конкретных оптимизаций, которые выполняет JIT.

Я знаю только о "методе встраивания", но должно быть гораздо больше. Голосуйте за каждый пример.

5 ответов


Ну, вы должны просмотреть статьи Брайана Гетца для примеров.

короче говоря, HotSpot может и будет:

  1. методы рядный
  2. присоединиться к прилежащему.synchronized блоки на одном объекте
  3. устранить блокировки, если монитор недоступен из других потоков
  4. устранить мертвый код (следовательно, большинство микро-бенчмарков бессмысленны)
  5. Падение памяти записи для не -volatile переменные
  6. заменить интерфейсные вызовы на прямые метод вызывает методы, реализованные только один раз

и так далее


на сайте JIKES RVM есть отличная презентация по оптимизации, используемой современными JVMs: ACACES ' 06-динамическая компиляция и адаптивная оптимизация в виртуальных машинах

он обсуждает архитектуру, компромиссы, измерения и методы. И называет по крайней мере 20 вещей, которые JVMs делают для оптимизации машинного кода.


Я думаю, что интересные вещи-это те вещи, которые обычный компилятор не может делать вопреки JIT-компилятором. Методы встраивания, устранение мертвого кода, CSE, живой анализ и т. д. все сделано вашим средним компилятором C++, а также ничего "особенного" здесь

но оптимизация чего-то на основе оптимистических предположений, а затем деоптимизация позже, если они окажутся неправильными? (предполагая определенный тип, удаление ветвей, которые в любом случае потерпят неудачу позже, если это не будет сделано,..) Удаление виртуального звонки, если мы можем гарантировать, что на данный момент существует только один класс (опять же то, что надежно работает только с деоптимизацией)? Адаптивная оптимизация - это то, что действительно отличает JIT от вашего запуска компилятора mill c++.

возможно, также упомяните профилирование среды выполнения, выполняемое JIT, чтобы проанализировать, какие оптимизации он должен применять (не то, что уникально больше со всеми оптимизациями, ориентированными на профиль).


есть старый, но все еще действительный обзор в в этой статье.

основные моменты, похоже, выполняют классическую оптимизацию на основе доступной информации профилирования среды выполнения:

  • JITting "горячие точки" в родной код
  • адаптивная вставка-вставка наиболее часто называемых реализаций для данного метода отправки, чтобы избежать огромного размера кода

и некоторые второстепенные, такие как generational GC, которые делает выделение короткоживущих объектов дешевле и различные другие меньшие оптимизации, а также все остальное, что было добавлено после публикации этой статьи.

есть также более подробный официальный whitepaper, и довольно nitty-gritty HotSpot Internals wiki страница это список того, как написать быстрый Java-код, который должен позволить вам экстраполировать, какие варианты использования были оптимизированы.


переходит к эквивалентному машинному коду вместо интерпретации JVM op-кодов. Отсутствие необходимости моделировать машину (JVM) в машинном коде для сильно используемой части приложения Java (что эквивалентно расширению JVM) обеспечивает хорошее увеличение скорости.

конечно, это большая часть того, что HotSpot.