Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JIT vs. AOTЕдинство и борьба динамического истатического компиляторов для Java        Никита Липский        Excelsior
Интерпретатор vs.         Компилятор• Интерпретатор исполняет  программу сразу• Компилятор транслирует  программу в машинн...
Java to Java Bytecode• Программа на языке Java  транслируется в Java bytecode• JVM – исполняет Java bytecode
Исполнение         Java байткода JVM• Интерпретация• Компиляция в машинный код и  исполнение на “железе”
Трансляция Java to Native• Динамическая (Just-In-Time – JIT).  – Трансляция происходит во время    исполнения программы• С...
Java vs. C/C++• Умолчательный компилятор в  машинный код для Java – динамический• Умолчательный компилятор в  машинный код...
Мифы вокруг статической   компиляции Java
Миф 1.          Java - динамическая• Reflection• Динамическая загрузкаСтатическая компиляция невозможна?
Миф 2. Машинный код –        убийца WORAWORA: Write Once Run Anywhere(пиши раз, исполняй везде)                !=BORA: Bui...
Миф 3. JIT быстрееДинамический профиль исполнения            РУЛИТ!          Или не рулит?
Миф 4. AOT быстрееМашинный код со старта      РУЛИТ!
Java динамическая?
Бинарная совместимостьПозволяет менять один “слегка”изменившийся класс независимо от“окружения”– Замена кода на лету (hots...
Пользовательские          загрузчики классов• Умолчательная логика загрузки  провоцирует JAR Hell
Пользовательскиезагрузчики классов
Время старта приложения
Холодный старт vs                теплыйВо второй раз приложение стартуетзначительно быстрее, чем в первый  – Загрузка кода...
Java Quick Start• Java Quick Start  – Предзагружает rt.jar, динамические    библиотеки
AOT быстрее?• Машинный код “толще” Java bytecode• Загрузка кода с диска занимает  больше времени, чем его начальное  испол...
AOT быстрее!• Код исполняемый на старте – в начало  «экзешника»• Можно предзагружать стартовый  сегмент последовательным ч...
Оптимизации
Оптимизации• Зависят от выбора внутреннего  представления• Часто невозможны без  предварительного анализа программы• Качес...
Оптимизации• Виды оптимизаций  –   Протяжка констант             – Аллокация объектов на стэке и  –   Удаление избыточного...
Анализ потока данных• Протяжка констант• Удаление общих подвыражений• Оптимальное распределение  регистров.• И многое другое
Java – ООП• Много методов• Методы маленькие (get/set)• Методы по умолчанию  ВИРТУАЛЬНЫЕ
Девиртулизация                   вызовов• Предусловие дальнейшей открытой  подстановки (inline)• Анализ иерархии классов  ...
Аллокация объектов                на стэке• Все Java объекты создаются в динамической  памяти – Java heap (куча)• Большинс...
Глобальный анализ• Типовый и Escape анализы боятся  вызовов, особенно виртуальных.• Глобальный анализ – анализирует все  м...
Анализы и оптимизации• Часто бывают довольно сложными• Требуют итеративного пересчета• Глобальный анализ зависит от ВСЕЙ  ...
Анализы и оптимизации• Часто бывают довольно сложными• Требуют итеративного пересчета• Глобальный анализ зависит от ВСЕЙ  ...
Динамические               оптимизации• Профилировка и селективная компиляция• Открытая подстановка на основе профиля  исп...
Динамические             оптимизацииМожет ли статический компиляториспользовать динамический профильисполнения?
Горячий код vs теплый• А что будет, если у приложения нет  ярко выраженного горячего кода?• Долгий прогрев, результаты про...
Не кодом единым …• Кроме кода приложения, есть еще код JVM  –   Управление памятью  –   Сборка мусора  –   Потоки и синхро...
А что сравниваем?Динамические       Статическиекомпиляторы        компиляторы  HotSpot client   GCJ  HotSpot server   Exce...
А что сравниваем?• Качество самой реализации влияет на  производительность приложения  – HotSpot server vs HotSpot client ...
Будущее Java• У беспроводных устройств есть  БАТАРЕЙКА• Процессорное время в облаках дорого
Будущее Java• У JIT и AOT есть свои преимущества• Совмещение двух подходов даст  максимальный эффект
Для тех, кто в танке
Для тех, кто в танке• Есть много JVM с уникальными  свойствами• Статическая компиляция Java возможна  и дает преимущества•...
Вопросы?Никита Липский,Excelsiornlipsky@excelsior-usa.com(383) 330-55-08
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и статического компиляторов для Java
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и статического компиляторов для Java
Upcoming SlideShare
Loading in …5
×

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и статического компиляторов для Java

1,345 views

Published on

  • Be the first to comment

  • Be the first to like this

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и статического компиляторов для Java

  1. 1. JIT vs. AOTЕдинство и борьба динамического истатического компиляторов для Java Никита Липский Excelsior
  2. 2. Интерпретатор vs. Компилятор• Интерпретатор исполняет программу сразу• Компилятор транслирует программу в машинный код
  3. 3. Java to Java Bytecode• Программа на языке Java транслируется в Java bytecode• JVM – исполняет Java bytecode
  4. 4. Исполнение Java байткода JVM• Интерпретация• Компиляция в машинный код и исполнение на “железе”
  5. 5. Трансляция Java to Native• Динамическая (Just-In-Time – JIT). – Трансляция происходит во время исполнения программы• Статическая (Ahead-Of-Time – AOT) – Трансляция происходит до исполнения программы
  6. 6. Java vs. C/C++• Умолчательный компилятор в машинный код для Java – динамический• Умолчательный компилятор в машинный код для С/С++ – статический
  7. 7. Мифы вокруг статической компиляции Java
  8. 8. Миф 1. Java - динамическая• Reflection• Динамическая загрузкаСтатическая компиляция невозможна?
  9. 9. Миф 2. Машинный код – убийца WORAWORA: Write Once Run Anywhere(пиши раз, исполняй везде) !=BORA: Build Once?(собирай раз??? …)
  10. 10. Миф 3. JIT быстрееДинамический профиль исполнения РУЛИТ! Или не рулит?
  11. 11. Миф 4. AOT быстрееМашинный код со старта РУЛИТ!
  12. 12. Java динамическая?
  13. 13. Бинарная совместимостьПозволяет менять один “слегка”изменившийся класс независимо от“окружения”– Замена кода на лету (hotswapping)– Маленькие обновления
  14. 14. Пользовательские загрузчики классов• Умолчательная логика загрузки провоцирует JAR Hell
  15. 15. Пользовательскиезагрузчики классов
  16. 16. Время старта приложения
  17. 17. Холодный старт vs теплыйВо второй раз приложение стартуетзначительно быстрее, чем в первый – Загрузка кода и данных приложения с диска – Загрузка системных и сторонних динамических библиотек (dll, so)
  18. 18. Java Quick Start• Java Quick Start – Предзагружает rt.jar, динамические библиотеки
  19. 19. AOT быстрее?• Машинный код “толще” Java bytecode• Загрузка кода с диска занимает больше времени, чем его начальное исполнение
  20. 20. AOT быстрее!• Код исполняемый на старте – в начало «экзешника»• Можно предзагружать стартовый сегмент последовательным чтением
  21. 21. Оптимизации
  22. 22. Оптимизации• Зависят от выбора внутреннего представления• Часто невозможны без предварительного анализа программы• Качество оптимизаций зависит от мощи/точности анализа
  23. 23. Оптимизации• Виды оптимизаций – Протяжка констант – Аллокация объектов на стэке и – Удаление избыточного кода их взрыв – Удаление общих подвыражений – Удаление проверок времени – Открытая подстановка исполнения – Специализация методов – Удаление избыточной синхронизации – Развертывание циклов – Оптимальная выборка кода и – Версионирование циклов свертка шаблонов – Вынос инвариантов – Планировка инструкций – Удаление хвостовой рекурсии – Оптимальное распределение – Девиртуализация вызовов регистров• На каком внутреннем представлении и с помощью каких анализов?
  24. 24. Анализ потока данных• Протяжка констант• Удаление общих подвыражений• Оптимальное распределение регистров.• И многое другое
  25. 25. Java – ООП• Много методов• Методы маленькие (get/set)• Методы по умолчанию ВИРТУАЛЬНЫЕ
  26. 26. Девиртулизация вызовов• Предусловие дальнейшей открытой подстановки (inline)• Анализ иерархии классов – метод не перегружается – невиртульный• Типовый анализ – new T().foo(); //вызов foo() невиртульный
  27. 27. Аллокация объектов на стэке• Все Java объекты создаются в динамической памяти – Java heap (куча)• Большинство объектов временные• Хочется их размещать на стэке метода• Escape анализ (анализ утечек) – определяет утекает ли объект в разделяемую память.
  28. 28. Глобальный анализ• Типовый и Escape анализы боятся вызовов, особенно виртуальных.• Глобальный анализ – анализирует все методы программы, в частности уточняя типовый и escapе анализы.
  29. 29. Анализы и оптимизации• Часто бывают довольно сложными• Требуют итеративного пересчета• Глобальный анализ зависит от ВСЕЙ программы.
  30. 30. Анализы и оптимизации• Часто бывают довольно сложными• Требуют итеративного пересчета• Глобальный анализ зависит от ВСЕЙ программы.Все ли это можетсебе позволить JIT?
  31. 31. Динамические оптимизации• Профилировка и селективная компиляция• Открытая подстановка на основе профиля исполнения• Оптимизация трасс исполнения• Выбор оптимальных инструкций
  32. 32. Динамические оптимизацииМожет ли статический компиляториспользовать динамический профильисполнения?
  33. 33. Горячий код vs теплый• А что будет, если у приложения нет ярко выраженного горячего кода?• Долгий прогрев, результаты прогрева не используются при дальнейших стартах приложения
  34. 34. Не кодом единым …• Кроме кода приложения, есть еще код JVM – Управление памятью – Сборка мусора – Потоки и синхронизация – Обработка исключительных ситуаций – …• Кроме Java кода, есть сторонний код – Native методы + нативные библиотеки (в т.ч. ОС)
  35. 35. А что сравниваем?Динамические Статическиекомпиляторы компиляторы HotSpot client GCJ HotSpot server Excelsior JET JRockit IBM J9 IBM J9 Java ME Java ME .NET .NET
  36. 36. А что сравниваем?• Качество самой реализации влияет на производительность приложения – HotSpot server vs HotSpot client – Java ME JIT vs Java ME AOT – .NET JIT vs .NET AOT – GCJ vs Excelsior JET – HotSpot vs Excelsior JET
  37. 37. Будущее Java• У беспроводных устройств есть БАТАРЕЙКА• Процессорное время в облаках дорого
  38. 38. Будущее Java• У JIT и AOT есть свои преимущества• Совмещение двух подходов даст максимальный эффект
  39. 39. Для тех, кто в танке
  40. 40. Для тех, кто в танке• Есть много JVM с уникальными свойствами• Статическая компиляция Java возможна и дает преимущества• Будущее за гибридным подходом
  41. 41. Вопросы?Никита Липский,Excelsiornlipsky@excelsior-usa.com(383) 330-55-08

×