SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
Системы
динамической компиляции в
                     JVM




              Николай Иготти
Требования к компилятору

• Не требуется стандартом Java
• Основное поведенческое требование - прозрачность
• Функционально – только для повышения
  производительности
• Что делает компилятор?
• Степень управляемости
• Нежелательный источник недетерминизма




                                                 2
Что компилировать?

• Всѐ
• Классы
• Методы
• Базовые блоки
• Ещѐ?




                     3
Когда компилировать?
• Предварительно (AOT)
      Больше ресурсов на оптимизацию
      Предсказуемый результат, проще поиск ошибок в
       компиляторе
      Новый стандарт на промежуточное представление (или
       компиляция в существующие стандарты)
      Сложности деоптимизации

• На лету (JIT)
      Больше информации для оптимизации
        • Аппаратное обеспечение
        • Контекст компиляции
        • Типичное поведение
      Деоптимизация по мере необходимости
      Что компилировать (déjà vu)?
•   Комбинированные подходы
      Подсказки JITу
      Сохранение исходного байткода
                                                            4
Профилировка и динамическая
оптимизация
• Цикл разработки: написание – компиляция-
  отладка – профилировка – оптимизация
• Объекты оптимизации: hotspots, common
  paths, дорогие операции
• Чем может помочь динамический
  профилятор+компилятор:
   Обнаружение часто исполняемого кода
   Оптимизация под common path
   Исключение дорогих операций
   Реоптимизация при изменении нагрузки



                                             5
Простой компилятор

• Параметризированные шаблоны – кусочки
  машинного кода
• Трансляция сводится к последовательной
  замене байткодов на шаблоны
• Выигрыш:
   Не нужен диспетчер переходящий к
    следующему байткоду
   Можно хранить часто используемые
    значения, например TOS в машинных
    регистрах
   Ещѐ?

                                           6
Оптимизирующий комилятор

• Анализ реальной семантики байткода (в
  IR)
• Оптимизация:
   Стандартные компиляторные оптимизации
    (какие?)
   Инлайнинг
   Доступы к памяти
   Выделение машинных регистров
   Обработка NPE
   Блокировки
   Барьеры коллектора
   Построение кода оптимизированного под
    типичное исполнение и типичные данные
                                          7
Деоптимизация и
 реоптимизация
• Динамический компилятор делает
  оптимистичекие предположения
• Tempora mutantur…
• Может быть необходимо остановить
  исполнение скомпилированного кода и
  получить его состояние
• ... et nos mutamur in illis
• Заново породить код с учетом новых
  условий
• Продолжить исполнение кода из заданного
  состояния
                                            8
Компилятору необходимо
взаимодействие с…
• Коллектором
• Интерпретатором (если есть)
• Менеджером блокировок
• Менеджером исключений Ява
• Загрузчиком классов (зачем?)
• Отладчиком Ява (зачем?)
• Менеджером исключительных ситуаций ОС
• Коллектор релоцирует ссылки в
  порождѐнном коде

                                          9
Вопросы

• Чем ещѐ хорош AOT?
• Какой язык более “динамический” –
  Java или C++? Как это влияет на
  компиляторы с этих языков?
• Какие оптимизации осмысленны на
  уровне Java -> байткод, а какие на
  уровне байткод -> машинный код?
• Как reflection может влиять на дизайн
  компилятора (AOT?, JIT?)

                                          10

Mais conteúdo relacionado

Destaque

Lenguaje de opinion (2)
Lenguaje de opinion (2)Lenguaje de opinion (2)
Lenguaje de opinion (2)damarit
 
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avulla
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avullaTyössäoppimispaikkaan perehtyminen mobiilielokuvan avulla
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avullaPauliina Venho
 
20071111 efficientalgorithms kulikov_lecture06
20071111 efficientalgorithms kulikov_lecture0620071111 efficientalgorithms kulikov_lecture06
20071111 efficientalgorithms kulikov_lecture06Computer Science Club
 
Tipos de marketing anderson villarreal
Tipos de marketing anderson villarrealTipos de marketing anderson villarreal
Tipos de marketing anderson villarrealandersithon
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Diego Pacheco
 
Sistemas de ecuaciones_Morochovilla_Act4
Sistemas de ecuaciones_Morochovilla_Act4Sistemas de ecuaciones_Morochovilla_Act4
Sistemas de ecuaciones_Morochovilla_Act4Espitiru
 
Mis objetos tecnologicos diego viviescas
Mis objetos tecnologicos diego viviescasMis objetos tecnologicos diego viviescas
Mis objetos tecnologicos diego viviescasdiegoviviescas
 
Los medios de transporte
Los medios de transporteLos medios de transporte
Los medios de transporteJMAV3SALINAS
 
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLIC
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLICDR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLIC
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLICDr Ian Ellis-Jones
 
One piece volume 02(009-017)
One piece volume 02(009-017)One piece volume 02(009-017)
One piece volume 02(009-017)Marcos Donato
 
Д. М. Ицыксон. Вводный курс. Лекция 1
Д. М. Ицыксон. Вводный курс. Лекция 1Д. М. Ицыксон. Вводный курс. Лекция 1
Д. М. Ицыксон. Вводный курс. Лекция 1Computer Science Club
 
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...Bente Kalsnes
 
Programa de Navidad Ciudad de Gáldar 2012
Programa de Navidad Ciudad de Gáldar 2012Programa de Navidad Ciudad de Gáldar 2012
Programa de Navidad Ciudad de Gáldar 2012Nuestras Islas Canarias
 

Destaque (20)

Hackers del mundo
Hackers del mundoHackers del mundo
Hackers del mundo
 
Lenguaje de opinion (2)
Lenguaje de opinion (2)Lenguaje de opinion (2)
Lenguaje de opinion (2)
 
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avulla
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avullaTyössäoppimispaikkaan perehtyminen mobiilielokuvan avulla
Työssäoppimispaikkaan perehtyminen mobiilielokuvan avulla
 
20071111 efficientalgorithms kulikov_lecture06
20071111 efficientalgorithms kulikov_lecture0620071111 efficientalgorithms kulikov_lecture06
20071111 efficientalgorithms kulikov_lecture06
 
Tipos de marketing anderson villarreal
Tipos de marketing anderson villarrealTipos de marketing anderson villarreal
Tipos de marketing anderson villarreal
 
MINIEMPRESA ATENA
MINIEMPRESA ATENAMINIEMPRESA ATENA
MINIEMPRESA ATENA
 
El software-sesión 03
El software-sesión 03El software-sesión 03
El software-sesión 03
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2
 
Sistemas de ecuaciones_Morochovilla_Act4
Sistemas de ecuaciones_Morochovilla_Act4Sistemas de ecuaciones_Morochovilla_Act4
Sistemas de ecuaciones_Morochovilla_Act4
 
Mis objetos tecnologicos diego viviescas
Mis objetos tecnologicos diego viviescasMis objetos tecnologicos diego viviescas
Mis objetos tecnologicos diego viviescas
 
Los medios de transporte
Los medios de transporteLos medios de transporte
Los medios de transporte
 
Paralegal AA degree
Paralegal AA degreeParalegal AA degree
Paralegal AA degree
 
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLIC
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLICDR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLIC
DR NORMAN VINCENT PEALE WAS NOT ANTI-CATHOLIC
 
Bbhita
BbhitaBbhita
Bbhita
 
One piece volume 02(009-017)
One piece volume 02(009-017)One piece volume 02(009-017)
One piece volume 02(009-017)
 
Д. М. Ицыксон. Вводный курс. Лекция 1
Д. М. Ицыксон. Вводный курс. Лекция 1Д. М. Ицыксон. Вводный курс. Лекция 1
Д. М. Ицыксон. Вводный курс. Лекция 1
 
Projeto de Restauração Urbana do Bairro Cosme Velho
Projeto de Restauração Urbana do Bairro Cosme VelhoProjeto de Restauração Urbana do Bairro Cosme Velho
Projeto de Restauração Urbana do Bairro Cosme Velho
 
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...
Sett fra Origo: Hvordan sosiale medier kan åpne opp politiske beslutningspros...
 
UOP Diploma
UOP DiplomaUOP Diploma
UOP Diploma
 
Programa de Navidad Ciudad de Gáldar 2012
Programa de Navidad Ciudad de Gáldar 2012Programa de Navidad Ciudad de Gáldar 2012
Programa de Navidad Ciudad de Gáldar 2012
 

Semelhante a 20100307 virtualization igotti_lecture05

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииNikita Lipsky
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
JPHP - О проекте на простом языке
JPHP - О проекте на простом языкеJPHP - О проекте на простом языке
JPHP - О проекте на простом языкеDmitry Zaytsev
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийAndrey Akinshin
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiAlexander Makarov
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Колёса Крыша Маркет
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
PHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаPHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаRoman Pronskiy
 

Semelhante a 20100307 virtualization igotti_lecture05 (20)

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
JPHP - О проекте на простом языке
JPHP - О проекте на простом языкеJPHP - О проекте на простом языке
JPHP - О проекте на простом языке
 
Platov
PlatovPlatov
Platov
 
Практические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложенийПрактические приёмы оптимизации .NET-приложений
Практические приёмы оптимизации .NET-приложений
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Roslyn Code Analysis
Roslyn Code AnalysisRoslyn Code Analysis
Roslyn Code Analysis
 
PHP 5.4 - особенности перехода
PHP 5.4 - особенности переходаPHP 5.4 - особенности перехода
PHP 5.4 - особенности перехода
 

Mais de Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

Mais de Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20100307 virtualization igotti_lecture05

  • 2. Требования к компилятору • Не требуется стандартом Java • Основное поведенческое требование - прозрачность • Функционально – только для повышения производительности • Что делает компилятор? • Степень управляемости • Нежелательный источник недетерминизма 2
  • 3. Что компилировать? • Всѐ • Классы • Методы • Базовые блоки • Ещѐ? 3
  • 4. Когда компилировать? • Предварительно (AOT)  Больше ресурсов на оптимизацию  Предсказуемый результат, проще поиск ошибок в компиляторе  Новый стандарт на промежуточное представление (или компиляция в существующие стандарты)  Сложности деоптимизации • На лету (JIT)  Больше информации для оптимизации • Аппаратное обеспечение • Контекст компиляции • Типичное поведение  Деоптимизация по мере необходимости  Что компилировать (déjà vu)? • Комбинированные подходы  Подсказки JITу  Сохранение исходного байткода 4
  • 5. Профилировка и динамическая оптимизация • Цикл разработки: написание – компиляция- отладка – профилировка – оптимизация • Объекты оптимизации: hotspots, common paths, дорогие операции • Чем может помочь динамический профилятор+компилятор:  Обнаружение часто исполняемого кода  Оптимизация под common path  Исключение дорогих операций  Реоптимизация при изменении нагрузки 5
  • 6. Простой компилятор • Параметризированные шаблоны – кусочки машинного кода • Трансляция сводится к последовательной замене байткодов на шаблоны • Выигрыш:  Не нужен диспетчер переходящий к следующему байткоду  Можно хранить часто используемые значения, например TOS в машинных регистрах  Ещѐ? 6
  • 7. Оптимизирующий комилятор • Анализ реальной семантики байткода (в IR) • Оптимизация:  Стандартные компиляторные оптимизации (какие?)  Инлайнинг  Доступы к памяти  Выделение машинных регистров  Обработка NPE  Блокировки  Барьеры коллектора  Построение кода оптимизированного под типичное исполнение и типичные данные 7
  • 8. Деоптимизация и реоптимизация • Динамический компилятор делает оптимистичекие предположения • Tempora mutantur… • Может быть необходимо остановить исполнение скомпилированного кода и получить его состояние • ... et nos mutamur in illis • Заново породить код с учетом новых условий • Продолжить исполнение кода из заданного состояния 8
  • 9. Компилятору необходимо взаимодействие с… • Коллектором • Интерпретатором (если есть) • Менеджером блокировок • Менеджером исключений Ява • Загрузчиком классов (зачем?) • Отладчиком Ява (зачем?) • Менеджером исключительных ситуаций ОС • Коллектор релоцирует ссылки в порождѐнном коде 9
  • 10. Вопросы • Чем ещѐ хорош AOT? • Какой язык более “динамический” – Java или C++? Как это влияет на компиляторы с этих языков? • Какие оптимизации осмысленны на уровне Java -> байткод, а какие на уровне байткод -> машинный код? • Как reflection может влиять на дизайн компилятора (AOT?, JIT?) 10