80
JVM: краткий курс общей анатомии Никита Липский Владимир Парфиненко Excelsior LLC

VM: краткий курс общей анатомии

Embed Size (px)

Citation preview

Page 1: VM: краткий курс общей анатомии

JVM:%краткий%курс%%общей%анатомии%

Никита&Липский&

Владимир&Парфиненко&

Excelsior&LLC&

Page 2: VM: краткий курс общей анатомии

2&

Page 3: VM: краткий курс общей анатомии

3&

Page 4: VM: краткий курс общей анатомии

Никита%Липский%

•  Более&20&лет&профессиональной&карьеры&•  Инициатор&проекта&Excelsior&JET&&

– работал&над&проектом&более&16&лет&– как&идейный&вдохновитель&– как&компиляторный&инженер&– как&руководитель&– и&много&в&каких&еще&ролях&&&&

•  &Open&source&проекты&WebFX&и&Java&ReStart&&– в&свободное&от&работы&время&

•  twiber:&@pjBooms&

4&

Page 5: VM: краткий курс общей анатомии

Владимир%Парфиненко%

•  Менее&20&лет&профессиональной&карьеры&

•  Один&из&разработчиков&Excelsior&JET&&– Программирую&компиляторы&

•  Активно&учу&студентов&в&НГУ&•  twiber:&@cypok&

5&

Page 6: VM: краткий курс общей анатомии

План%доклада%

•  Java&class&file&and&bytecode&&•  Classloading&engine&•  Execuwon&engine:&interpretators,&JIT,&AOT&•  Meta&informawon&access&subsystem:&reflecwon,&indy,&JNI&

•  Threading,&excepwon&handling,&synchronizawon&•  Memory&management:&heap,&allocawon,&GC&

•  Manageability&and&Monitoring&

6&

Page 7: VM: краткий курс общей анатомии

Java%class%file%&%bytecode%

7&

Page 8: VM: краткий курс общей анатомии

Java%class%file%%•  1&класс&<–>&1&классÜфайл&•  Constant&Pool&&

– числа,&строки&– указатели&на&классы,&методы,&поля&

•  Описание&класса&

8&

– имя&– модификаторы&– супер&класс&– супер&интерфейсы&

– поля&– методы&– атрибуты&

Page 9: VM: краткий курс общей анатомии

Java%class%file%

•  Поля,&методы&тоже&имеют&атрибуты&(например,&значения&константных&полей)&

•  Главный&атрибут&метода&–&это&его&код:&Java&байтÜкод&

9&

Page 10: VM: краткий курс общей анатомии

Java%bytecode%

•  Массив&инструкций&

•  Стэк&операндов&инструкций&метода&&

•  Массив&локальных&переменных&(аргументы&метода,&локальные&переменные)&

10&

Page 11: VM: краткий курс общей анатомии

Java%bytecode%

Инструкция&берет&свои&операнды&со&стэка&&и&&кладет&результат&на&стэк.&Пример:&

11&

0: iload 3 // загрузить на стэк переменную #3!2: bipush 5 // загрузить на стэк константу 5!4: iadd! // сложить два операнда со стэка и загрузить // на стэк результат!5: istore 4 // снять значение со стэка в переменную #4!

Page 12: VM: краткий курс общей анатомии

JVM:%предисловие%

12&

Page 13: VM: краткий курс общей анатомии

Программа%для%JVM%

Любая&программа&исполняемая&на&JVM&имеет?&

13&

Page 14: VM: краткий курс общей анатомии

Программа%для%JVM%

Любая&программа&исполняемая&на&JVM&имеет:&

•  main&класс&public static void main(String[] args)!

•  сlasspath&–&список&директорий&и&архивов&(jar&файлов)&

•  В&мире&веб&приложений&программа&для&JVM&–&это&веб&сервер&– Tomcat,&GlassFish&и&т.п.&

14&

Page 15: VM: краткий курс общей анатомии

Java%RunOme%Для&исполнения&программы&на&JVM&одной&JVM&не&достаточно.&Нужен&Java&Runwme&Environment:&•  JVM&•  Платформенные&классы&

–  core&классы&(j.l.Object,&j.l.String&и&т.д.)&–  Java&standard&APIs&(IO,&NET,&NIO,&AWT/Swing&и&т.д)&&&&&

•  Реализация&нативных&методов&платформенных&классов&(OS&specific)&

•  Вспомогательные&файлы&(описатели&временных&зон,&медиа&ресурсы&и&т.п.)&

15&

Page 16: VM: краткий курс общей анатомии

Анатомия%JVM%

16&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 17: VM: краткий курс общей анатомии

Classloading%engine%

17&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 18: VM: краткий курс общей анатомии

Загрузка%классов%

•  Где&JVM&берет&классы&для&исполнения:&

– Из&Java&Runwme&(платформенные&классы)&

– Из&classpath&приложения&&

– АвтоÜсгенеренные&на&лету&(Proxy,&Reflecwon&accessors,&реализация&invoke&dynamic)&

– Предоставленные&самим&приложением&

18&

Page 19: VM: краткий курс общей анатомии

Загрузка%классов%

•  Каждый&класс&грузится&какимÜто&загрузчиком&классов:&– Платформенные&классы&грузятся&bootstrap&загрузчиком&– Классы&из&classpath&приложения&–&&системным&загрузчиком&(AppClassLoader)&&

– Классы&приложения&могут&создавать&свои&загрузчики,&которые&будут&грузить&классы&&&

&&

19&

Page 20: VM: краткий курс общей анатомии

Загрузка%классов%

•  Каждый&класс&грузится&какимÜто&загрузчиком&классов:&– Платформенные&классы&грузятся&bootstrap&загрузчиком&– Классы&из&classpath&приложения&–&&системным&загрузчиком&(AppClassLoader)&&

– Классы&приложения&могут&создавать&свои&загрузчики,&которые&будут&грузить&классы&&&

•  Загрузчик&классов&образует&уникальное&пространство&имен&классов&

20&

Page 21: VM: краткий курс общей анатомии

Старт%JVM%

•  Грузится&main&класс&системным&загрузчиком&(из&classpath&приложения)&– Провоцирует&загрузку&части&платформенных&классов&(core)&

•  Исполняется&метод&main(String[]&args)&

21&

Page 22: VM: краткий курс общей анатомии

Процесс%загрузки%класса%%(создание%класса)%

•  Читается&class&file&&– Проверяется&корректность&формата&(может&выбросить&ClassFormatError)&

•  Создается&ранÜтайм&представление&класса&в&выделенной&области&памяти&&–  runwme&constant&pool&in&Method&Area&aka&Meta%Space&aka&Permanent&Generawon&

•  Грузятся&суперкласс,&суперинтерфейсы&

22&

Page 23: VM: краткий курс общей анатомии

Линковка%

•  Верификация&байтÜкода&

•  Подготовка&

•  Разрешение&символьных&ссылок&

23&

Page 24: VM: краткий курс общей анатомии

C:&StackOverflowError&

A:&Программа&зациклится& B:&VerifyError&

D:&БайтÜкод&не&исполнится&

Что&произойдет&при&исполнении&этого&байтÜкода?&

Page 25: VM: краткий курс общей анатомии

Верификация%байт]кода%

•  Происходит&с&классом&один&раз&•  Проверка&корректности&инструкций&(корректности&переходов)&

•  Проверка&выхода&за&пределы&стэка&операндов&и&локальных&переменных&

•  Проверка&совместимости&типов&

25&

Page 26: VM: краткий курс общей анатомии

Верификация%байт]кода%

•  Верификация&методом&вывода&типов&(type&inference&verificawon)&– Потоковый&анализ:&итеративное&уточнение&типовой&информации&до&достижения&неподвижной&точки&

•  Раздельная&(split)&верификация&(type&checking&verificawon)&– Неподвижная&точка&для&потокового&анализа&кодируется&внутрь&байтÜкода&специальным&атрибутом.&Т.о.&верификация&происходит&за&один&проход&&&

26&

Page 27: VM: краткий курс общей анатомии

Ну%а%если%все]таки%запустить%без%верификации?%

$ java -noverify test!!# A fatal error has been detected by the Java Runtime Environment:!Exception in thread "main" java.lang.StackOverflowError!        at test.foo(test.j)!        at test.main(test.j:3)!#!#  Internal Error (javaCalls.cpp:53), pid=8012, tid=16396!#  guarantee(!thread->is_Compiler_thread()) failed: cannot make java calls from the compiler!#!# If you would like to submit a bug report, please visit:!#   http://bugreport.java.com/bugreport/crash.jsp!!

27&

Page 28: VM: краткий курс общей анатомии

Разрешение%символьных%ссылок%

Класс&может&иметь&ссылки&на&другие&классы&и&поля,&методы&других&классов&

•  Ленивое&разрешение&&– ссылки&разрешаются&при&первом&доступе&

•  Энергичное&разрешение&– разрешаются&все&ссылки&какие&возможно&&

28&

Page 29: VM: краткий курс общей анатомии

Инициализация%класса%

•  Вызов&статического&инициализатора&класса&

•  Случается&при&first&use:&– new&– доступ&до&статического&поля&– вызов&статического&метода&

•  Провоцирует&инициализацию&суперÜкласса&и&суперÜинтерфейсов&с&default&методами&

29&

Page 30: VM: краткий курс общей анатомии

ExecuOon%engine%

30&

OS&+&CP

U&

Monitoring&

Bytecode&

Classloading&engine&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Bytecode&Verificawon&

&AOT&

Page 31: VM: краткий курс общей анатомии

Исполнение%Java%байт]кода%

JVM&может&исполнять&байтÜкод&двумя&способам:&

&

•  Интерпретировать&

•  Транслировать&в&машинный&код,&который&будет&исполняться&непосредственно&на&CPU&&

31&

Page 32: VM: краткий курс общей анатомии

Интерпретатор%

pc = 0;!do {! fetch opcode at pc;! if (operands) fetch operands;! execute the opcode;! calculate pc;!} while (there is more to do);!

32&

Page 33: VM: краткий курс общей анатомии

Компиляторы%•  Неоптимизирующие&

–  “что&вижу,&то&пою”&&&

•  Простые&оптимизирующие&(пример&HotSpot&Client)&–  Простое&внутреннее&представление&(IR)&–  Простые&оптимизации&–  Pros:&быстрая&компиляция&&

•  Сложные&оптимизирующие&(пример&HotSpot&Server)&–  Сложный&IR,&более&мощные&оптимизации&–  Pros:&более&оптимальный&код&

33&

Page 34: VM: краткий курс общей анатомии

•  Динамические&(JustÜInÜTime&–&JIT).&&– Трансляция&в&машинный&код&происходит&во&время&исполнения&программы&

•  Статические&(AheadÜOfÜTime&–&AOT)&– Трансляция&происходит&до&исполнения&программы&

34&

Компиляторы%

Page 35: VM: краткий курс общей анатомии

Динамические%компиляторы%(JIT)%

•  Работают&одновременно&с&исполняемой&программой&•  Компилируют&горячий&код&•  Горячий&код&вычисляется&с&помощью&динамического&профилировщика&

•  Используют&информацию&времени&исполнения&для&оптимизаций&

35&

Page 36: VM: краткий курс общей анатомии

Статические%компиляторы%(AOT)%%

•  Не&ограничены&в&ресурсах&для&оптимизации&программ&

•  Компилируют&каждый&метод&программы&применяя&самые&агрессивные&оптимизации&

•  На&оптимизацию&не&тратятся&ресурсы&во&время&исполнения&программы&(быстрее&старт)&

36&

Page 37: VM: краткий курс общей анатомии

Статические%компиляторы%(AOT)%%%

Интересный%факт:%Во#время#работы#статически#скомпилированной#Java#программы#может#не#исполниться#ни#одного#Java#байт<кода.#&

Вопрос:%а#где#JVM?#&

37&

Page 38: VM: краткий курс общей анатомии

Meta%informaOon%subsystem%

38&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 39: VM: краткий курс общей анатомии

ReflecOon%

•  Позволяет&доступаться&до&классов,&полей,&методов&по&имени&из&Java&программы&

•  Реализуется&в&JVM&через&доступ&в&Meta&space&&

•  Ключевая&возможность&Java&для&многих&популярных&фреймворков&и&реализаций&языков&на&JVM&&

39&

Page 40: VM: краткий курс общей анатомии

Method%Handles%and%%invokedynamic%(JSR]292,%indy)%

•  Indy:&программируемый&вызов&– для&эффективной&реализации&динамических&языков&на&JVM&

&

•  MethodHandle&–&целевой&объект&вызова&через&invokedynamic&&– может&быть&доступом&к&полю,&методу&– комбинацией&других&MethodHandle&

– может&использоваться&отдельно&от&indy:&Reflecwon&2.0&

40&

Page 41: VM: краткий курс общей анатомии

Java%naOve%interface%(JNI)%•  Связывает&JVM&c&внешним&миром&(OS)&

•  Си&интерфейс&к&JVM&– Не&зависит&от&реализации&JVM&– Используется&для&реализации&nawve&методов&на&языке&&С&(или&другом&системном&языке)&

–  С&помощью&JNI&написаны&платформенноÜзависимые&реализации&&&&&&Java&SE&API:&IO,&NET,&AWT&

•  Реализуется&в&JVM&как&доступ&к&Meta&space&

41&

Page 42: VM: краткий курс общей анатомии

%Threading%and%synchronizaOon%

42&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 43: VM: краткий курс общей анатомии

java.lang.Thread%•  Java&поток&мапируется&на&нативный&поток&в&соотношение&1Ü1&

•  С&потоком&связана&память&используемая&для&локальных&переменных&и&стэка&операндов&методов&(фреймов&методов):&стэк&(stack)&–  Размер&стэка&–&параметр&JVM:&ÜXss&

•  Имеет&информацию&о&стэке&вызовов&методов&потока&(stack&trace)&–  В&любой&момент&может&о&нем&рассказать&&

43&

Page 44: VM: краткий курс общей анатомии

Обработка%исключений%%

Знание&о&стэке&вызовов&помогает&в&обработке&исключений:&

44&

method&7&throw&

method&3&catch&

method&6&

.&.&.&

method&2&

.&.&.&

method&3&catch&

method&2&

.&.&.&

PC&

PC&

excepwon&caught&

Page 45: VM: краткий курс общей анатомии

Потоки%и%Java%Memory%Model%

45&

// Thread 1:!Shared.data = getData();!Shared.ready = true;!

// Thread 2:!while (!Shared.ready) {! // wait!}!receivedData = Shared.data;!

Page 46: VM: краткий курс общей анатомии

Потоки%и%Java%Memory%Model%

•  Разделяемая&(shared)&память&– Объекты&создаваемые&в&одних&потоках&могут&быть&далее&доступны&из&других&

•  Семантика&доступа&к&разделяемой&памяти&из&разных&потоков&описывается&в&Java&Memory&Model&(Java&Language&Specificawon)&– Семантика&нетривиальна&в&связи&с&тем,&что&порядок&выполнения&инструкций&в&методе&не&обязан&быть&линейным&

46&

Page 47: VM: краткий курс общей анатомии

Синхронизация%

•  Для&безопасного&доступа&к&разделяемой&памяти&между&потоками&

•  В&наивной&реализации&используются&средства&ОС&– ОС&монитор&есть&в&каждом&Java&объекте&как&скрытое&поле&&

•  Оптимизирована&когда&конкуренция&за&ресурс&происходит&много&реже,&чем&вход&в&synchronized&

47&

Page 48: VM: краткий курс общей анатомии

Memory%management%

48&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 49: VM: краткий курс общей анатомии

Выделение%памяти%

•  Реализация&оператора&new%

•  Объекты&выделенные&с&помощью&оператора&new%располагаются&&в&т.н.&куче&(Java&heap)&

•  Организация&Java&heap&JVMÜcпецифична&

•  Разметка&(layout)&Java&объекта&тоже&JVM&специфична.&

49&

Page 50: VM: краткий курс общей анатомии

Java%heap%

Внутренняя&топология&Java&кучи&сильно&зависит&от&алгоритма&GC.&В&разных&реализациях&может&делиться&на:&

&

•  Область&молодого&и&старого&поколения&•  Разбиваться&на&блоки&•  Большие&объекты&могут&управляться&особым&образом&

50&

Page 51: VM: краткий курс общей анатомии

Аллокация%объектов%

•  Должна&быть&быстрой&–  JVM&запрашивает&у&OC&память&не&под&один&объект,&а&сразу&на&много&&

– Аллокация&методом&продвижения&границы&

•  ПотокоÜбезопасной&(threadÜsafe),&но&при&этом&параллельной&(не&блокирующей)&– Thread&local&heaps:&каждый&поток&“грызет”&свой&кусок&памяти&

51&

Page 52: VM: краткий курс общей анатомии

Layout%Java%объекта%

Не&специфицируется&JVM,&но&по&факту&требует:&•  Java&Object&header&

– Указатель&на&класс&– Монитор&(lock)&–  Idenwty&hashcode&– Флаги&для&GC&

•  Поля&– Могут&быть&переупорядочены&из&соображений&экономии&размера,&выравнивания,&особенностей&целевой&архитектуры&

52&

Page 53: VM: краткий курс общей анатомии

Сборка%мусора%

53&

Page 54: VM: краткий курс общей анатомии

Сборка%мусора%

54&

Page 55: VM: краткий курс общей анатомии

Что%такое%мусор?%

55&

Page 56: VM: краткий курс общей анатомии

Что%такое%мусор?%

56&

Page 57: VM: краткий курс общей анатомии

Что%такое%мусор?%

57&

Page 58: VM: краткий курс общей анатомии

Что%такое%мусор?%

58&

Page 59: VM: краткий курс общей анатомии

Мусор%

Мусором&являются&объекты,&которые&не&могут&использоваться&программой&

Вопрос:%А&какие&объекты&могут&использоваться?&&

59&

Page 60: VM: краткий курс общей анатомии

Мусор%

Мусором&являются&объекты,&которые&не&могут&использоваться&программой&

&

Вопрос:%А&какие&объекты&могут&использоваться?&&

Ответ:%&Не&мусор!&%

60&

Page 61: VM: краткий курс общей анатомии

Не%мусор%

1.  Объекты&в&статических&полях&классов&

2.  В&локальных&переменных&

3.  …&всё?&

61&

Page 62: VM: краткий курс общей анатомии

Не%мусор%

Object o = new Object();!...!

62&

GC&случилс

я&здесь!&

Page 63: VM: краткий курс общей анатомии

Не%мусор%2%

1.  Объекты&в&статических&полях&классов&

2.  &В&локальных&переменных&Доступных&из&фрейма&метода&(локальные&переменные&и&стэк&операндов)&

&

Какого&метода?&

63&

Page 64: VM: краткий курс общей анатомии

Не%мусор%

64&

Page 65: VM: краткий курс общей анатомии

Не%мусор%2%возвращается%%

1.  Объекты&в&статических&полях&классов&

2.  &В&локальных&переменных&Доступных&из&фрейма&метода&фреймов&методов&(локальные&переменные&и&стэк&операндов)&стэка&вызовов&всех&Java&потоков.&

3.  Объекты,&на&которые&ссылается&“не&мусор”&

65&

Page 66: VM: краткий курс общей анатомии

Корневое%множество%объектов%%(GC%roots)%

1.  Объекты&в&статических&полях&классов&

2.  Объекты&доступные&со&стэка&Java&потоков&

3.  &Объекты&из&JNI&ссылок&в&nawve&методах&

66&

Page 67: VM: краткий курс общей анатомии

Не%мусор%3%

Не&мусор&aka&живые#объекты&–&это:&&&

1.  Объекты&из&корневого&множества&&

2.  Объекты,&на&которые&ссылаются&живые&объекты&

Все&остальное&–&мусор.&

67&

Page 68: VM: краткий курс общей анатомии

Трассирующие%сборщики%

•  MarkÜandÜsweep&– Помечает&живые&объекты&(mark),&“выметает”&(удаляет)&мусор&(sweep)&

•  StopÜandÜcopy&– Копирует&живые&объекты&в&специальное&место&(copy)&&– Освободившиеся&место&(мусор&и&места&где&были&живые&объекты)&может&использоваться&для&новой&аллокации&

68&

Page 69: VM: краткий курс общей анатомии

Stop%the%World%

•  Живые&объекты&определены&для&определенного&момента&исполнения&программы&– При&исполнении&множество&меняется&

•  Чтобы&собрать&мусор&в&общем&случае&нужно&остановить&потоки,&чтобы&определить&где&мусор&(STW#пауза)&

&69&

Page 70: VM: краткий курс общей анатомии

Stop%the%World%

Одна&из&основных&задач&современных&сборщиков&мусора&–&это&уменьшение&времени&STW&паузы.&Методы&уменьшения:&•  Инкрементальный&&

–  &собирать&не&весь&мусор&в&паузе&•  Параллельный&

– собирать&мусор&во&многих&потоках&в&паузе&•  Одновременный&(concurrent)&

– собирать&мусор&одновременно&с&работой&программы&(не&останавливая&потоки)&&

&&

&

70&

Page 71: VM: краткий курс общей анатомии

Поколенная%сборка%мусора%

Гипотеза%о%поколениях:%большинство#объектов#умирает#молодыми#%Поколенный&(generawonal)&GC:&•  частный&вид&инкрементального&•  во&время&т.н.&малых#сборок&удаляем&мусор&&среди&молодых&объектов&

•  объекты,&пережившие&одну&или&несколько&сборок,&перемещаем&в&область&старого&поколения&&

%71&

Page 72: VM: краткий курс общей анатомии

GC:%advanced%topics%

•  Финализаторы%и%слабые%ссылки%•  GC&(safe)&points&•  Точные&vs.&консервативные&GC&•  Способы&борьбы&с&фрагментацией&кучи&•  Real&wme&GC&•  Class&GC&•  Базовые&алгоритмы&GC&•  Конкретные&реализации:&

–  В&одной&HotSpot&JVM&пять(!)&разных&GC&

72&

Page 73: VM: краткий курс общей анатомии

Manageability%&%Monitoring%

73&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 74: VM: краткий курс общей анатомии

Manageability%&%Monitoring%

JVM&знает&про&вашу&программу&всё:&•  про&все&загруженные&классы&•  про&все&живые&объекты&•  про&все&потоки&•  про&все&исполняемые&методы&потоков&

Почему&бы&не&поделиться&с&вами&этой&информацией&во&время&исполнения?&&

74&

Page 75: VM: краткий курс общей анатомии

Manageability%&%Monitoring%

JVM&Tool&Interface&(JVM&TI):&•  отладчики&&•  профилировщики&

Java&Management&Beans:&•  Инструменты&мониторинга&запущенных&приложений&

–  JConsole,&JMX&console,&AMC&&–  Visual&VM&–  Java&Mission&Control&

75&

Page 76: VM: краткий курс общей анатомии

Абстрактная%JVM%

76&

OS&+&CP

U&

Monitoring&

&AOT&

Bytecode&

Classloading&engine&

Bytecode&Verificawon&

Execuwon&engine:&interpreter,&JIT&

Threading&Synchronizawon&

Meta&informawon&

Memory&management,&Garbage&Collecwon&

Nawve&methods&

Page 77: VM: краткий курс общей анатомии

Реализации%JVM%

Совместимые&с&Java&SE&спецификацией:&

•  Oracle&HotSpot&&•  Oracle&JRockit&(RIP)&•  IBM&J9&

•  Excelsior&JET&•  Azul&(HotSpot&based,&но&свой&GC)&•  SAP,&RedHat&(свои&порты&HotSpot&на&разные&платформы)&

77&

Page 78: VM: краткий курс общей анатомии

Заключение%•  JVM&сложная,&но&жутко&интересная&штука&

•  Java&–&золотая&середина&современных&IT&технологий:&– Подробно&специфицирована&–  Эффективность&помноженная&на&гибкость:&&

•  типизированность&Java&байтÜкода&позволяет&его&транслировать&в&машинный&код&очень&эффективно&

•  при&этом&reflecwon,&indy,&динамическая&загрузка&придает&платформе&высокую&гибкость&и&динамичность&

•  Все&реализации&JVM&в&постоянном&развитии&на&острие&науки&и&технологий&

78&

Page 79: VM: краткий курс общей анатомии

Хочешь%стать%JVM%инженером?%

•  В&компании&Excelsior&есть&стажировка&для&студентов&НГУ&–  research&and&development&in&Excelsior&Research&VM&&

– пишите&письма&на&[email protected]&&

•  Актуальные&научные&проблемы&в&области&оптимизирующих&компиляторов,&сборки&мусора&

•  Лучшие&дипломные&работы&на&потоке&– получают&золотые&медали&среди&дипломных&работ&России&– работы&мирового&уровня&

79&

Page 80: VM: краткий курс общей анатомии

Вопросы и ответы

Никита Липский, Excelsior

[email protected] twitter: @pjBooms

Владимир Парфиненко, Excelsior

[email protected] twitter: @cypok

80&