20100307 virtualization igotti_lecture05
Upcoming SlideShare
Loading in...5
×
 

20100307 virtualization igotti_lecture05

on

  • 382 views

 

Statistics

Views

Total Views
382
Views on SlideShare
339
Embed Views
43

Actions

Likes
0
Downloads
2
Comments
0

2 Embeds 43

http://logic.pdmi.ras.ru 38
http://www.compsciclub.ru 5

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

20100307 virtualization igotti_lecture05 20100307 virtualization igotti_lecture05 Presentation Transcript

  • Системы динамической компиляции в 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