В лекции о JIT в Hotspot я хочу привести как можно больше примеров конкретных оптимизаций, которые выполняет JIT.
Я знаю только "метод inlining", но должно быть намного больше. Проголосуйте за каждый пример.
В лекции о JIT в Hotspot я хочу привести как можно больше примеров конкретных оптимизаций, которые выполняет JIT.
Я знаю только "метод inlining", но должно быть намного больше. Проголосуйте за каждый пример.
Хорошо, вам следует отсканировать статьи Брайана Гетца.
Вкратце, HotSpot может и будет:
synchronized
на одном и том же объектеvolatile
et cetera
Существует отличная презентация об оптимизации, используемой современными JVM на сайте Jikes RVM: ACACES06 - Динамическая компиляция и адаптивная оптимизация в виртуальных машинах
В нем обсуждается архитектура, компромиссы, измерения и методы. И имена как минимум 20 вещей JVM делают для оптимизации машинного кода.
Я думаю, что интересный материал - это те вещи, которые обычный компилятор не может делать вопреки JIT. Методы инкрустации, устраняя мертвый код, CSE, живой анализ и т.д., Все делается вашим средним компилятором С++, ничего особенного здесь
Но оптимизируя что-то, основанное на оптимистичных предположениях, а затем более поздно преувеличивая, если они оказываются неправыми? (предполагая определенный тип, удаляя ветки, которые позже не удастся, но если это не будет сделано,..) Удаление виртуальных вызовов, если мы можем гарантировать, что на данный момент существует только один класс (опять-таки то, что только надежно работает с деоптимизацией)? Адаптивная оптимизация - это, на мой взгляд, одна вещь, которая действительно отличает JIT от запуска компилятора mill С++.
Может быть, также упоминается профилирование времени выполнения, выполненное JIT, для анализа того, какие оптимизации он должен применять (но не тот, что уникален больше, несмотря на все оптимизации, ориентированные на профиль).
Там старый, но, вероятно, все еще действительный обзор в в этой статье.
Основные моменты, по-видимому, выполняют классическую оптимизацию на основе имеющейся информации профилирования во время выполнения:
И некоторые второстепенные, такие как генераторный GC, который упрощает выделение короткоживущих объектов и различные другие меньшие оптимизации, плюс все, что было добавлено после публикации этой статьи.
Кроме того, более подробный официальный документ и довольно ничтожный Wiki-страница HotSpot Internals, в которой описывается, как быстро писать Java-код, который должен позволить вам экстраполировать, какие варианты использования были оптимизированы.
Переход на эквивалентный код машинного кода вместо JVM-интерпретации op-кодов. Отсутствие необходимости моделирования машины (JVM) в машинных кодах для сильно используемой части приложения Java (что эквивалентно расширению JVM) обеспечивает хорошее увеличение скорости.
Конечно, большая часть того, что такое HotSpot.