SlideShare una empresa de Scribd logo
1 de 87
Descargar para leer sin conexión
AOT	
  компиляция	
  Java	
  
	
  
Никита Липский
Excelsior
1
ÄДàаâвíнûыìм äдàаâвíнîо	
  
2
ÄДàаâвíнûыìм äдàаâвíнîо,
ÂВîо âвðрåеìмåеíнàа ÑС+++ ++++++	
  
3
ÄДàаâвíнûыìм äдàаâвíнîо,
ÂВîо âвðрåеìмåеíнàа ÑС+++,
ÂВñсåе êкîоìмïпèиëлÿяòтîоðрûы
áбûыëлèи ñсòтàаòтèи÷чåеñсêкèиåе ++++++	
  
4
ÏПîоêкàа íнåе ïпîоÿяâвèиëлàаñсüь..
	
  
5
ÏПîоêкàа íнåе ïпîоÿяâвèиëлàаñсüь
Java 	
  
6
•  Интерпретация	
  
•  Компиляция	
  в	
  машинный	
  код	
  и	
  исполнение	
  
на	
  “железе”	
  
Исполнение	
  	
  
Java	
  байткода	
  JVM	
  
7
Трансляция	
  Java	
  to	
  Na@ve	
  
•  Динамическая	
  (Just-­‐In-­‐Time	
  –	
  JIT).	
  	
  
– Трансляция	
  происходит	
  во	
  время	
  исполнения	
  
программы	
  
•  Статическая	
  (Ahead-­‐Of-­‐Time	
  –	
  AOT)	
  
– Трансляция	
  происходит	
  до	
  исполнения	
  
программы	
  
8
9
Статическая	
  компиляция	
  Java	
  
•  Это	
  вообще	
  возможно?	
  
–  Если	
  да,	
  то	
  при	
  каких	
  условиях	
  и	
  будет	
  ли	
  это	
  все	
  еще	
  
называться	
  Java?	
  
•  Зачем	
  это	
  нужно?	
  
–  Обфускация	
  vs.	
  статическая	
  компиляция	
  
–  Старт	
  приложения	
  
–  Уменьшение	
  размера	
  дистрибутива	
  Java	
  приложения	
  
без	
  зависимостей	
  от	
  Java	
  
–  Производительность:	
  какие	
  преимущества	
  перед	
  JIT	
  
компиляцией	
  
–  Почему	
  AOT	
  лучше	
  для	
  Desktop,	
  Embedded,	
  Mobile	
  
–  Есть	
  ли	
  выгода	
  от	
  применения	
  AOT	
  на	
  server	
  side	
  
10
11
Кому	
  нужен	
  AOT	
  для	
  Java?	
  	
  
Кто знает про Excelsior JET?Кто знает про Excelsior JET?
12
 
Мифы	
  вокруг	
  статической	
  
компиляции	
  Java	
  
13
•  Reflecron	
  
•  Динамическая	
  загрузка	
  
	
  
Статическая	
  компиляция	
  невозможна?	
  
Миф	
  1.	
  	
  
Java	
  -­‐	
  	
  «слишком»	
  динамическая	
  	
  
14
 
WORA:	
  Write	
  Once	
  Run	
  Anywhere	
  
(пиши	
  раз,	
  исполняй	
  везде)	
  
!=	
  
BORA:	
  Build	
  Once?	
  
(собирай	
  раз???	
  …)	
  
Миф	
  2.	
  AOT	
  компиляция	
  –	
  	
  
убийца	
  WORA	
  
15
”Я	
  получу	
  (маленький)	
  исполняемый	
  файл,	
  
который	
  будет	
  работать	
  без	
  JVM	
  (как	
  в	
  
С)”	
  
	
  
Но:	
  
– Стандартные	
  классы?	
  
– 	
  GC,	
  reflecron?	
  
Миф	
  3.	
  AOT	
  =	
  маленький	
  Exe	
  
16
 
Тем	
  не	
  менее,	
  используя	
  AOT,	
  можно	
  
получить	
  	
  дистрибутив	
  Java	
  приложения	
  
без	
  зависимостей	
  от	
  Java	
  значительно	
  
меньший,	
  чем	
  размер	
  JRE:	
  
	
  
“Javа	
  худеет”:	
  	
  
h•ps://www.youtube.com/results?
search_query=javaday+худеет	
  	
  
Миф	
  3.	
  AOT	
  =	
  маленький	
  Exe	
  
17
Java	
  «слишком»	
  динамическая	
  
18
•  Переопределяют	
  умолчательную	
  логику	
  
разрешений	
  ссылок	
  между	
  классами	
  
•  Уникальное	
  пространство	
  имен	
  
•  Позволяют	
  управлять	
  зависимостями,	
  решая	
  
проблемы	
  JAR	
  hell	
  (OSGi,	
  Java	
  Module	
  System)	
  
•  Java	
  EE	
  сервера,	
  Eclipse	
  RCP,	
  плагины	
  
Нестандартные	
  загрузчики	
  классов	
  
19
Как	
  компилировать	
  статически?	
  
•  Компилировать	
  каждый	
  класс	
  изолировано	
  
от	
  других	
  
– Плохо	
  для	
  производительности	
  
•  Изучить	
  логику	
  разрешения	
  ссылок	
  для	
  
популярных	
  загрузчиков	
  
– Не	
  работает	
  для	
  произвольных	
  загрузчиков	
  
Нестандартные	
  загрузчики	
  классов	
  
20
Нестандартные	
  загрузчики	
  классов	
  
Classes	
  
21
Classes	
  
CL1	
  
CL2	
  
CL3	
  
CL4	
  
Нестандартные	
  загрузчики	
  классов	
  
CLi: classloader (загрузчик классов) 22
•  CL4	
  •  CL3	
  
•  CL2	
  •  CL1	
  
classes	
   classes	
  
classes	
  classes	
  
Нестандартные	
  загрузчики	
  классов	
  
23
•  CL4	
  •  CL3	
  
•  CL2	
  •  CL1	
  
classes	
  
classes	
  
classes	
  classes	
  
Нестандартные	
  загрузчики	
  классов	
  
24
•  CL4	
  •  CL3	
  
•  CL2	
  •  CL1	
  
classes	
   classes	
  
classes	
  classes	
  
Нестандартные	
  загрузчики	
  классов	
  
25
–  Картинка	
  
•  CL4	
  •  CL3	
  
•  CL2	
  •  CL1	
  
classes	
   classes	
  
classes	
  
Нестандартные	
  загрузчики	
  классов	
  
26
•  CL4	
  •  CL3	
  
•  CL2	
  •  CL1	
  
classes	
   classes	
  
Нестандартные	
  загрузчики	
  классов	
  
27
Схема	
  поддержки	
  загрузчиков	
  в	
  AOT:	
  
•  Компонента	
  разрешения	
  ссылок	
  в	
  AOT	
  	
  
компиляторе:	
  
–  Определяет,	
  какие	
  загрузчики	
  будут	
  созданы	
  
во	
  время	
  исполнения	
  и	
  назначает	
  каждому	
  
статический	
  ID	
  
–  Разбивает	
  классы	
  приложения	
  по	
  загрузчикам	
  	
  
–  Разрешает	
  ссылки	
  между	
  классами	
  	
  
Нестандартные	
  загрузчики	
  классов	
  
28
Схема	
  поддержки	
  загрузчиков	
  в	
  AOT:	
  
•  Во	
  время	
  исполнения:	
  
–  По	
  экземпляру	
  загрузчика	
  вычисляется	
  ID	
  
–  Имея	
  статический	
  ID,	
  мы	
  можем	
  грузить	
  
статически	
  скомпилированные	
  классы:	
  
•  создание	
  экземпляра	
  класса	
  java.lang.Class	
  
•  наполнение	
  его	
  рефлективной	
  информацией	
  
•  загрузка	
  кода	
  осуществляется	
  OS	
  
Нестандартные	
  загрузчики	
  классов	
  
29
Зачем	
  AOT	
  для	
  Java?	
  
30
Защита	
  кода	
  от	
  декомпиляции	
  
31
•  Java	
  bytecode	
  легко	
  превращается	
  в	
  
исходный	
  код	
  
•  Процесс	
  обфускации	
  при	
  активном	
  
использовании	
  reflecron	
  трудоемок	
  и	
  
трудно	
  поддерживаем	
  
•  Даже	
  по	
  обфусцированному	
  коду	
  часто	
  
можно	
  понять,	
  что	
  код	
  делает	
  (ссылки	
  на	
  
JDK	
  остаются	
  в	
  неизменном	
  виде)	
  
Защита	
  кода	
  приложения	
  
32
•  Машинный	
  код	
  можно	
  только	
  эффективно	
  
дизассемблировать	
  
•  По	
  дизассемблированному	
  коду	
  не	
  понять	
  
структуру	
  приложения	
  (нет	
  имен	
  классов,	
  
методов)	
  
•  После	
  агрессивной	
  оптимизации	
  
машинный	
  код	
  далек	
  от	
  оригинального	
  
кода	
  
Защита	
  кода	
  приложения	
  
33
Время	
  старта	
  приложения	
  
34
Во	
  второй	
  раз	
  приложение	
  стартует	
  
значительно	
  быстрее,	
  чем	
  в	
  первый	
  
– Загрузка	
  кода	
  и	
  данных	
  приложения	
  с	
  диска	
  
– Загрузка	
  системных	
  и	
  сторонних	
  динамических	
  
библиотек	
  (dll,	
  so)	
  
Холодный	
  старт	
  vs	
  теплый	
  
35
 
Java	
  Quick	
  Start	
  
	
  
•  Java	
  Quick	
  Start	
  
– Предзагружает	
  rt.jar,	
  динамические	
  
библиотеки	
  
36
AOT	
  быстрее?	
  
•  Машинный	
  код	
  “толще”	
  Java	
  bytecode	
  
•  Загрузка	
  кода	
  с	
  диска	
  занимает	
  больше	
  
времени,	
  чем	
  его	
  начальное	
  исполнение	
  
37
AOT	
  быстрее!	
  
•  Код	
  исполняемый	
  на	
  старте	
  –	
  в	
  начало	
  
исполняемого	
  файла	
  	
  
•  Можно	
  предзагружать	
  стартовый	
  сегмент	
  
последовательным	
  чтением	
  
38
39
Производительность	
  
40
 
	
  
	
  	
  “Скомпилировав	
  Java	
  статически,	
  мы	
  
получим	
  скорость	
  приложения	
  как	
  в	
  C,	
  C	
  	
  
быстрее	
  Java,	
  	
  следовательно	
  AOT	
  быстрее”	
  
	
  
	
  
Миф	
  4.	
  AOT	
  быстрее	
  
41
 
	
  
“Эффективно	
  оптимизировать	
  Java	
  
приложения	
  можно	
  только	
  на	
  основе	
  
динамического	
  профиля	
  исполнения”	
  	
  
	
  
Миф	
  5.	
  JIT	
  быстрее	
  
42
–  Протяжка	
  констант	
  
–  Удаление	
  избыточного	
  кода	
  
–  Удаление	
  общих	
  
подвыражений	
  
–  Открытая	
  подстановка	
  
–  Специализация	
  методов	
  
–  Развертывание	
  циклов	
  
–  Версионирование	
  циклов	
  
–  Вынос	
  инвариантов	
  
–  Удаление	
  хвостовой	
  
рекурсии	
  
–  Девиртуализация	
  вызовов	
  
–  Аллокация	
  объектов	
  на	
  
стэке	
  и	
  их	
  взрыв	
  
–  Удаление	
  проверок	
  
времени	
  исполнения	
  
–  Удаление	
  избыточной	
  
синхронизации	
  
–  Оптимальная	
  выборка	
  
кода	
  и	
  свертка	
  
шаблонов	
  
–  Планировка	
  
инструкций	
  
–  Оптимальное	
  
распределение	
  
регистров	
  
Виды	
  оптимизаций	
  
43
Java	
  –	
  ООП	
  
• Много	
  методов	
  
• Методы	
  маленькие	
  (get/set)	
  
• Методы	
  по	
  умолчанию	
  ВИРТУАЛЬНЫЕ	
  
44
•  Предусловие	
  дальнейшей	
  открытой	
  подстановки	
  
(inline)	
  
•  Анализ	
  иерархии	
  классов	
  	
  
– метод	
  не	
  перегружается	
  –	
  невиртуальный	
  
•  Типовый	
  анализ	
  
– new T().foo(); //вызов foo()
невиртуальный
•  Inline	
  caches	
  
Девиртуализация	
  вызовов	
  
45
A a;
…	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  è	
  
	
  
a.foo();
	
  
if (RT_Type(a) in CHA) {
inlined body of foo()
} else {
a.foo();
}
Идея: метод не перегружается – невиртуальный
Анализ	
  иерархии	
  классов	
  (CHA)	
  
46
A a; //A – формальный тип
Если	
  A –	
  формальный	
  тип	
  переменой	
  a,	
  	
  
то	
  во	
  время	
  исполнения	
  в	
  a	
  могут	
  находится	
  значения	
  типа	
  
наследника	
  A.	
  	
  	
  Такие	
  типы	
  называются	
  фактическими.	
  
A a = new B(); //B – фактический тип
	
  
Источником	
  фактических	
  типов	
  для	
  статического	
  анализа	
  
являются	
  операторы	
  new.	
  	
  
Формальный	
  vs	
  фактический	
  тип	
  	
  
47
Идея:	
  	
  
new A().foo();	
  //невиртуальный	
  вызов	
  	
  
	
  
Типовый	
  анализ	
  
48
A a = b? new B() : new C();
a.foo();
	
  
Если	
  foo()	
  в	
  B	
  и	
  С один	
  и	
  тоже,	
  то	
  
	
  
a.foo() невиртуальный	
  вызов	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (можно	
  инлайнить)	
  
Типовый	
  анализ	
  
49
A a = b? bar() : baz();
…
a.foo();
	
  
Если	
  bar() возвращает	
  только	
  new B,	
  	
  	
  
	
  	
  	
  	
  	
  	
  а	
  baz()	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  экземпляры	
  new С,	
  то	
  
	
  
a.foo() - опять	
  невиртуальный	
  вызов	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (можно	
  инлайнить)	
  
Типовый	
  анализ	
  
50
 
	
  
Откуда	
  мы	
  знаем,	
  что	
  возвращает	
  bar() и	
  
baz()?	
  
Типовый	
  анализ	
  
51
•  Глобальный	
  анализ	
  –	
  анализирует	
  все	
  
методы	
  программы,	
  вычисляя	
  про	
  каждый	
  
метод	
  полезную	
  информацию	
  	
  
•  Результаты	
  глобального	
  анализа	
  
используются	
  для	
  оптимизации	
  
конкретного	
  метода	
  	
  	
  
Глобальный	
  анализ	
  
52
•  Все	
  Java	
  объекты	
  создаются	
  в	
  динамической	
  
памяти	
  –	
  Java	
  heap	
  (куча)	
  
•  Большинство	
  объектов	
  временные	
  
•  Хочется	
  их	
  размещать	
  на	
  стэке	
  метода	
  
•  Escape	
  анализ	
  (анализ	
  утечек)	
  –	
  определяет	
  
утекает	
  ли	
  объект	
  в	
  разделяемую	
  память.	
  
Аллокация	
  объектов	
  	
  
на	
  стэке	
  
53
void foo() {
for (Object o: getCollection()) {
doSomething(o);
}
}
Пример	
  	
  
54
void foo() {
Iterator iter = getCollection().iterator();
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
}
Пример	
  	
  
55
void foo() {
ArrayList list = getCollection();
Iterator iter = list.iterator();
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
}
Пример	
  	
  
56
void foo() {
ArrayList list = getCollection();
ArrayList.ListItr iter = new ListItr(list);
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
}
Пример	
  	
  
57
void foo() {
ArrayList list = getCollection();
ArrayList.ListItr iter = onStack ListItr();
iter.this$0 = list;
iter.cursor = 0;
iter.size = list.elemData.length;
while (iter.hasNext()) {
Object o = iter.next();
doSomething(o);
}
}
Пример	
  	
  
58
void foo() {
ArrayList list = getCollection();
ArrayList.ListItr iter = onStack ListItr(list);
iter.this$0 = list;
iter.cursor = 0;
iter.size = list.elemData.length;
while (iter.cursor < iter.size) {
int index = iter.cursor++;
Object o = iter.this$0.elemData[index];
doSomething(o);
}
}
Пример	
  	
  
59
void foo() {
ArrayList list = getCollection();
int cursor = 0;
int size = list.elemData.length;
while (cursor < size) {
Object o = list.elemData[cursor++];
doSomething(o);
}
}
Пример	
  	
  
60
void foo() {
ArrayList list = getCollection();
int size = list.elemData.length;
for (int i = 0; i < size; i++) {
doSomething(list.elemData[i]);
}
}
Пример	
  	
  
61
•  Часто	
  бывают	
  довольно	
  сложными	
  	
  
•  Требуют	
  итеративного	
  пересчета	
  
•  Глобальный	
  анализ	
  зависит	
  от	
  ВСЕЙ	
  программы.	
  
Анализ	
  и	
  оптимизации	
  
62
•  Часто	
  бывают	
  довольно	
  сложными	
  	
  
•  Требуют	
  итеративного	
  пересчета	
  
•  Глобальный	
  анализ	
  зависит	
  от	
  ВСЕЙ	
  программы.	
  
Все	
  ли	
  это	
  может	
  
себе	
  позволить	
  JIT?	
  
Анализ	
  и	
  оптимизации	
  
63
•  Часто	
  бывают	
  довольно	
  сложными	
  	
  
•  Требуют	
  итеративного	
  пересчета	
  
•  Глобальный	
  анализ	
  зависит	
  от	
  ВСЕЙ	
  программы.	
  
Все	
  ли	
  это	
  может	
  
себе	
  позволить	
  JIT?	
  
Анализ	
  и	
  оптимизации	
  
64
•  Часто	
  бывают	
  довольно	
  сложными	
  	
  
•  Требуют	
  итеративного	
  пересчета	
  
•  Глобальный	
  анализ	
  зависит	
  от	
  ВСЕЙ	
  программы.	
  
Все	
  ли	
  это	
  может	
  
себе	
  позволить	
  JIT?	
  
Анализ	
  и	
  оптимизации	
  
65
•  Профилировка	
  и	
  	
  селективная	
  компиляция	
  
•  Открытая	
  подстановка	
  на	
  основе	
  профиля	
  
исполнения	
  	
  
•  Оптимизация	
  трасс	
  исполнения	
  
•  Выбор	
  оптимальных	
  инструкций	
  
Динамические	
  оптимизации	
  
66
•  А	
  что	
  будет,	
  если	
  у	
  приложения	
  нет	
  ярко	
  
выраженного	
  горячего	
  кода?	
  
•  Долгий	
  прогрев,	
  результаты	
  прогрева	
  не	
  
используются	
  при	
  дальнейших	
  стартах	
  
приложения	
  
Горячий	
  код	
  vs	
  теплый	
  
67
JFCMark	
  (Short	
  Run)	
  
0%	
  
50%	
  
100%	
  
150%	
  
200%	
  
250%	
  
2	
  core	
  Celeron,	
  2.60Ghz	
   4	
  core	
  i5,	
  3.8GZ	
  
Excelsior	
  JET	
  
HotSpot	
  client	
  
HotSpot	
  server	
  
68
JFCMark	
  (Long	
  Run)	
  
0%	
  
20%	
  
40%	
  
60%	
  
80%	
  
100%	
  
120%	
  
140%	
  
160%	
  
2	
  core	
  Celeron,	
  2.60Ghz	
   4	
  core	
  i5,	
  3.8GZ	
  
Excelsior	
  JET	
  
HotSpot	
  client	
  
HotSpot	
  server	
  
69
 
Может	
  ли	
  статический	
  компилятор	
  
использовать	
  динамический	
  профиль	
  
исполнения?	
  
Динамические	
  оптимизации	
  
70
Server	
  side	
  
•  Процессорное	
  время	
  в	
  
	
  облаках	
  –	
  дорого	
  	
  
•  Через	
  некоторое	
  время	
  работы	
  сервера	
  
профиль	
  исполнения	
  стабилизируется	
  
•  Почему	
  этот	
  профиль	
  не	
  передать	
  
статическому	
  компилятору?	
  
71
•  Кроме	
  кода	
  приложения,	
  есть	
  еще	
  код	
  JVM	
  
–  Управление	
  памятью	
  
–  Сборка	
  мусора	
  
–  Потоки	
  и	
  синхронизация	
  
–  Обработка	
  исключительных	
  ситуаций	
  
–  …	
  
•  Кроме	
  Java	
  кода,	
  есть	
  сторонний	
  код	
  	
  
–  Narve	
  методы	
  +	
  нативные	
  библиотеки	
  (в	
  т.ч.	
  ОС)	
  
Не	
  кодом	
  единым	
  …	
  
72
Embedded	
  
•  Чем	
  слабее	
  железо,	
  тем	
  дороже	
  
динамическая	
  компиляция	
  
•  Встроенные	
  системы	
  часто	
  не	
  обладают	
  
теми	
  же	
  вычислительными	
  мощностями,	
  
что	
  и	
  настольные	
  компьютеры/сервера	
  	
  
73
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
74
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
75
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
– GC	
  и	
  	
  Memory	
  Manager	
  
76
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
– GC	
  и	
  	
  Memory	
  Manager	
  
– Reflecron	
  
77
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
– GC	
  и	
  	
  Memory	
  Manager	
  
– Reflecron	
  
– JIT	
  
78
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
– GC	
  и	
  	
  Memory	
  Manager	
  
– Reflecron	
  
– JIT	
  
Чего	
  не	
  хватает?	
  
79
Mobile	
  
•  JVM	
  on	
  Mobile:	
  
– Платформенные	
  классы	
  
– GC	
  и	
  	
  Memory	
  Manager	
  
– Reflecron	
  
– JIT	
  
Зарядки!	
  
	
  
80
Mobile	
  
•  У	
  беспроводных	
  устройств	
  есть	
  БАТАРЕЙКА	
  
	
  
•  Стоит	
  ли	
  ее	
  тратить	
  на	
  динамическую	
  
компиляцию?	
  
81
iOS	
  
•  Политика	
  распространения	
  приложений	
  на	
  
iOS	
  запрещает	
  любую	
  динамическую	
  
загрузку	
  кода	
  
•  Для	
  Java	
  возможен	
  либо	
  интерпретатор,	
  
либо	
  AOT	
  	
  	
  
82
AOT	
  компиляторы	
  для	
  Java	
  
GCJ
Excelsior JET
Android ART
RoboVM
Avian
CodeNameOne
IBM J9
Java ME
83
84
Статическая	
  компиляция	
  Java	
  	
  
•  возможна	
  
–  с	
  сохранением	
  всех	
  возможностей	
  Java	
  
–  	
  даже	
  в	
  присутствии	
  нестандартных	
  загрузчиков	
  классов	
  	
  
•  полезна	
  	
  
–  для	
  защиты	
  кода	
  
–  быстрого	
  старта	
  
–  лучшего	
  UX	
  
–  улучшения	
  производительности	
  
–  экономии	
  батарейки,	
  памяти,	
  диска	
  
Итоги	
  
85
Вопросы и ответы
Никита Липский,
Excelsior
nlipsky@excelsior-usa.com
twitter: @pjBooms
86
Ускорение	
  приложений	
  
87

Más contenido relacionado

La actualidad más candente

Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
Nikita Lipsky
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 

La actualidad más candente (20)

Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модули
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
AOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesAOT для Java: Мифы и Challenges
AOT для Java: Мифы и Challenges
 
Эволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингЭволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторинг
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0
 
Actor model. Futures & Promises. Reactive Streams.
Actor model. Futures & Promises. Reactive Streams.Actor model. Futures & Promises. Reactive Streams.
Actor model. Futures & Promises. Reactive Streams.
 
Actor model
Actor modelActor model
Actor model
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
01 - Java. Введение в Java
01 - Java. Введение в Java01 - Java. Введение в Java
01 - Java. Введение в Java
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
Nikita Tarakanov - Kernel Pool Overflow from Windows XP to Windows 8
Nikita Tarakanov - Kernel Pool Overflow from Windows XP to Windows 8Nikita Tarakanov - Kernel Pool Overflow from Windows XP to Windows 8
Nikita Tarakanov - Kernel Pool Overflow from Windows XP to Windows 8
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 

Destacado

Eπαναληπτικο διαγωνισμα στη χημεια γ λυκ (μαρτησ 2014)
Eπαναληπτικο διαγωνισμα  στη χημεια γ  λυκ (μαρτησ 2014)Eπαναληπτικο διαγωνισμα  στη χημεια γ  λυκ (μαρτησ 2014)
Eπαναληπτικο διαγωνισμα στη χημεια γ λυκ (μαρτησ 2014)
Xristos Koutras
 
INFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
INFOGRAPHIC: Android vs. Apple Smartphone Trade-insINFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
INFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
Sami Colenutt
 
εντεχνο τραγουδι παρουσίαση
εντεχνο τραγουδι παρουσίασηεντεχνο τραγουδι παρουσίαση
εντεχνο τραγουδι παρουσίαση
orfeas70
 
Travel Fashion Girl Writing Portfolio
Travel Fashion Girl Writing PortfolioTravel Fashion Girl Writing Portfolio
Travel Fashion Girl Writing Portfolio
Kelly Mazur
 
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
Eleni Kots
 
H μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιοH μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιο
Αλμπανάκη Ξανθή
 
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
Aggeliki Nikolaou
 
최신작게임『SX797』『СOM』모바일바카라
최신작게임『SX797』『СOM』모바일바카라최신작게임『SX797』『СOM』모바일바카라
최신작게임『SX797』『СOM』모바일바카라
hdlkfjgldf
 

Destacado (20)

Eπαναληπτικο διαγωνισμα στη χημεια γ λυκ (μαρτησ 2014)
Eπαναληπτικο διαγωνισμα  στη χημεια γ  λυκ (μαρτησ 2014)Eπαναληπτικο διαγωνισμα  στη χημεια γ  λυκ (μαρτησ 2014)
Eπαναληπτικο διαγωνισμα στη χημεια γ λυκ (μαρτησ 2014)
 
Our Xmas/new year wishes/5th grade
Our Xmas/new year wishes/5th gradeOur Xmas/new year wishes/5th grade
Our Xmas/new year wishes/5th grade
 
διαφημιση
διαφημισηδιαφημιση
διαφημιση
 
Codes and conventions of contents page soren
Codes and conventions of contents page sorenCodes and conventions of contents page soren
Codes and conventions of contents page soren
 
συνέντευξη από παππού ή γιαγιά
συνέντευξη από παππού ή γιαγιάσυνέντευξη από παππού ή γιαγιά
συνέντευξη από παππού ή γιαγιά
 
INFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
INFOGRAPHIC: Android vs. Apple Smartphone Trade-insINFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
INFOGRAPHIC: Android vs. Apple Smartphone Trade-ins
 
εντεχνο τραγουδι παρουσίαση
εντεχνο τραγουδι παρουσίασηεντεχνο τραγουδι παρουσίαση
εντεχνο τραγουδι παρουσίαση
 
Travel Fashion Girl Writing Portfolio
Travel Fashion Girl Writing PortfolioTravel Fashion Girl Writing Portfolio
Travel Fashion Girl Writing Portfolio
 
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
ΠΝΕΥΜΑΤΙΚΗ ΚΑΛΛΙΕΡΓΕΙΑ -ΔΗΜΟΚΡΑΤΙΑ
 
Riesgos fisicos
Riesgos fisicosRiesgos fisicos
Riesgos fisicos
 
Peripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius eventPeripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius event
 
H μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιοH μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιο
 
International opportunities for new librarians: With (or without) leaving home
International opportunities for new librarians: With (or without) leaving homeInternational opportunities for new librarians: With (or without) leaving home
International opportunities for new librarians: With (or without) leaving home
 
Σύμβαση Πωλητή Φωτοβολταϊκών INTRON
Σύμβαση Πωλητή Φωτοβολταϊκών INTRONΣύμβαση Πωλητή Φωτοβολταϊκών INTRON
Σύμβαση Πωλητή Φωτοβολταϊκών INTRON
 
INFOGRAPHIC: The toxic materials inside mobile phones and health implications
INFOGRAPHIC: The toxic materials inside mobile phones and health implicationsINFOGRAPHIC: The toxic materials inside mobile phones and health implications
INFOGRAPHIC: The toxic materials inside mobile phones and health implications
 
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4
 
Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010
 
Ley Celiaca
Ley CeliacaLey Celiaca
Ley Celiaca
 
최신작게임『SX797』『СOM』모바일바카라
최신작게임『SX797』『СOM』모바일바카라최신작게임『SX797』『СOM』모바일바카라
최신작게임『SX797』『СOM』모바일바카라
 
Ilyas akhmeov obrazovatelny_tsentr_konkurenty
Ilyas akhmeov obrazovatelny_tsentr_konkurentyIlyas akhmeov obrazovatelny_tsentr_konkurenty
Ilyas akhmeov obrazovatelny_tsentr_konkurenty
 

Similar a AOT-компиляция Java

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
Andrey Karpov
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
Dmitry Buzdin
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
 
20100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture0520100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture05
Computer Science Club
 

Similar a AOT-компиляция Java (20)

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
 
In the sun.misc.Unsafe bowels
In the sun.misc.Unsafe bowelsIn the sun.misc.Unsafe bowels
In the sun.misc.Unsafe bowels
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
20100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture0520100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture05
 

Más de Tech Talks @NSU

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
Tech Talks @NSU
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузки
Tech Talks @NSU
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналам
Tech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
Tech Talks @NSU
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном мире
Tech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
Tech Talks @NSU
 

Más de Tech Talks @NSU (20)

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнес
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузки
 
Автоматическое доказательство теорем
Автоматическое доказательство теоремАвтоматическое доказательство теорем
Автоматическое доказательство теорем
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналам
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном мире
 
Tech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попасть
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применение
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
 
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
 
Tech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностей
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 

Último

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 

Último (9)

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 

AOT-компиляция Java

  • 1. AOT  компиляция  Java     Никита Липский Excelsior 1
  • 4. ÄДàаâвíнûыìм äдàаâвíнîо, ÂВîо âвðрåеìмåеíнàа ÑС+++, ÂВñсåе êкîоìмïпèиëлÿяòтîоðрûы áбûыëлèи ñсòтàаòтèи÷чåеñсêкèиåе ++++++   4
  • 7. •  Интерпретация   •  Компиляция  в  машинный  код  и  исполнение   на  “железе”   Исполнение     Java  байткода  JVM   7
  • 8. Трансляция  Java  to  Na@ve   •  Динамическая  (Just-­‐In-­‐Time  –  JIT).     – Трансляция  происходит  во  время  исполнения   программы   •  Статическая  (Ahead-­‐Of-­‐Time  –  AOT)   – Трансляция  происходит  до  исполнения   программы   8
  • 9. 9
  • 10. Статическая  компиляция  Java   •  Это  вообще  возможно?   –  Если  да,  то  при  каких  условиях  и  будет  ли  это  все  еще   называться  Java?   •  Зачем  это  нужно?   –  Обфускация  vs.  статическая  компиляция   –  Старт  приложения   –  Уменьшение  размера  дистрибутива  Java  приложения   без  зависимостей  от  Java   –  Производительность:  какие  преимущества  перед  JIT   компиляцией   –  Почему  AOT  лучше  для  Desktop,  Embedded,  Mobile   –  Есть  ли  выгода  от  применения  AOT  на  server  side   10
  • 11. 11
  • 12. Кому  нужен  AOT  для  Java?     Кто знает про Excelsior JET?Кто знает про Excelsior JET? 12
  • 13.   Мифы  вокруг  статической   компиляции  Java   13
  • 14. •  Reflecron   •  Динамическая  загрузка     Статическая  компиляция  невозможна?   Миф  1.     Java  -­‐    «слишком»  динамическая     14
  • 15.   WORA:  Write  Once  Run  Anywhere   (пиши  раз,  исполняй  везде)   !=   BORA:  Build  Once?   (собирай  раз???  …)   Миф  2.  AOT  компиляция  –     убийца  WORA   15
  • 16. ”Я  получу  (маленький)  исполняемый  файл,   который  будет  работать  без  JVM  (как  в   С)”     Но:   – Стандартные  классы?   –   GC,  reflecron?   Миф  3.  AOT  =  маленький  Exe   16
  • 17.   Тем  не  менее,  используя  AOT,  можно   получить    дистрибутив  Java  приложения   без  зависимостей  от  Java  значительно   меньший,  чем  размер  JRE:     “Javа  худеет”:     h•ps://www.youtube.com/results? search_query=javaday+худеет     Миф  3.  AOT  =  маленький  Exe   17
  • 19. •  Переопределяют  умолчательную  логику   разрешений  ссылок  между  классами   •  Уникальное  пространство  имен   •  Позволяют  управлять  зависимостями,  решая   проблемы  JAR  hell  (OSGi,  Java  Module  System)   •  Java  EE  сервера,  Eclipse  RCP,  плагины   Нестандартные  загрузчики  классов   19
  • 20. Как  компилировать  статически?   •  Компилировать  каждый  класс  изолировано   от  других   – Плохо  для  производительности   •  Изучить  логику  разрешения  ссылок  для   популярных  загрузчиков   – Не  работает  для  произвольных  загрузчиков   Нестандартные  загрузчики  классов   20
  • 22. Classes   CL1   CL2   CL3   CL4   Нестандартные  загрузчики  классов   CLi: classloader (загрузчик классов) 22
  • 23. •  CL4  •  CL3   •  CL2  •  CL1   classes   classes   classes  classes   Нестандартные  загрузчики  классов   23
  • 24. •  CL4  •  CL3   •  CL2  •  CL1   classes   classes   classes  classes   Нестандартные  загрузчики  классов   24
  • 25. •  CL4  •  CL3   •  CL2  •  CL1   classes   classes   classes  classes   Нестандартные  загрузчики  классов   25
  • 26. –  Картинка   •  CL4  •  CL3   •  CL2  •  CL1   classes   classes   classes   Нестандартные  загрузчики  классов   26
  • 27. •  CL4  •  CL3   •  CL2  •  CL1   classes   classes   Нестандартные  загрузчики  классов   27
  • 28. Схема  поддержки  загрузчиков  в  AOT:   •  Компонента  разрешения  ссылок  в  AOT     компиляторе:   –  Определяет,  какие  загрузчики  будут  созданы   во  время  исполнения  и  назначает  каждому   статический  ID   –  Разбивает  классы  приложения  по  загрузчикам     –  Разрешает  ссылки  между  классами     Нестандартные  загрузчики  классов   28
  • 29. Схема  поддержки  загрузчиков  в  AOT:   •  Во  время  исполнения:   –  По  экземпляру  загрузчика  вычисляется  ID   –  Имея  статический  ID,  мы  можем  грузить   статически  скомпилированные  классы:   •  создание  экземпляра  класса  java.lang.Class   •  наполнение  его  рефлективной  информацией   •  загрузка  кода  осуществляется  OS   Нестандартные  загрузчики  классов   29
  • 30. Зачем  AOT  для  Java?   30
  • 31. Защита  кода  от  декомпиляции   31
  • 32. •  Java  bytecode  легко  превращается  в   исходный  код   •  Процесс  обфускации  при  активном   использовании  reflecron  трудоемок  и   трудно  поддерживаем   •  Даже  по  обфусцированному  коду  часто   можно  понять,  что  код  делает  (ссылки  на   JDK  остаются  в  неизменном  виде)   Защита  кода  приложения   32
  • 33. •  Машинный  код  можно  только  эффективно   дизассемблировать   •  По  дизассемблированному  коду  не  понять   структуру  приложения  (нет  имен  классов,   методов)   •  После  агрессивной  оптимизации   машинный  код  далек  от  оригинального   кода   Защита  кода  приложения   33
  • 35. Во  второй  раз  приложение  стартует   значительно  быстрее,  чем  в  первый   – Загрузка  кода  и  данных  приложения  с  диска   – Загрузка  системных  и  сторонних  динамических   библиотек  (dll,  so)   Холодный  старт  vs  теплый   35
  • 36.   Java  Quick  Start     •  Java  Quick  Start   – Предзагружает  rt.jar,  динамические   библиотеки   36
  • 37. AOT  быстрее?   •  Машинный  код  “толще”  Java  bytecode   •  Загрузка  кода  с  диска  занимает  больше   времени,  чем  его  начальное  исполнение   37
  • 38. AOT  быстрее!   •  Код  исполняемый  на  старте  –  в  начало   исполняемого  файла     •  Можно  предзагружать  стартовый  сегмент   последовательным  чтением   38
  • 39. 39
  • 41.        “Скомпилировав  Java  статически,  мы   получим  скорость  приложения  как  в  C,  C     быстрее  Java,    следовательно  AOT  быстрее”       Миф  4.  AOT  быстрее   41
  • 42.     “Эффективно  оптимизировать  Java   приложения  можно  только  на  основе   динамического  профиля  исполнения”       Миф  5.  JIT  быстрее   42
  • 43. –  Протяжка  констант   –  Удаление  избыточного  кода   –  Удаление  общих   подвыражений   –  Открытая  подстановка   –  Специализация  методов   –  Развертывание  циклов   –  Версионирование  циклов   –  Вынос  инвариантов   –  Удаление  хвостовой   рекурсии   –  Девиртуализация  вызовов   –  Аллокация  объектов  на   стэке  и  их  взрыв   –  Удаление  проверок   времени  исполнения   –  Удаление  избыточной   синхронизации   –  Оптимальная  выборка   кода  и  свертка   шаблонов   –  Планировка   инструкций   –  Оптимальное   распределение   регистров   Виды  оптимизаций   43
  • 44. Java  –  ООП   • Много  методов   • Методы  маленькие  (get/set)   • Методы  по  умолчанию  ВИРТУАЛЬНЫЕ   44
  • 45. •  Предусловие  дальнейшей  открытой  подстановки   (inline)   •  Анализ  иерархии  классов     – метод  не  перегружается  –  невиртуальный   •  Типовый  анализ   – new T().foo(); //вызов foo() невиртуальный •  Inline  caches   Девиртуализация  вызовов   45
  • 46. A a; …                                                  è     a.foo();   if (RT_Type(a) in CHA) { inlined body of foo() } else { a.foo(); } Идея: метод не перегружается – невиртуальный Анализ  иерархии  классов  (CHA)   46
  • 47. A a; //A – формальный тип Если  A –  формальный  тип  переменой  a,     то  во  время  исполнения  в  a  могут  находится  значения  типа   наследника  A.      Такие  типы  называются  фактическими.   A a = new B(); //B – фактический тип   Источником  фактических  типов  для  статического  анализа   являются  операторы  new.     Формальный  vs  фактический  тип     47
  • 48. Идея:     new A().foo();  //невиртуальный  вызов       Типовый  анализ   48
  • 49. A a = b? new B() : new C(); a.foo();   Если  foo()  в  B  и  С один  и  тоже,  то     a.foo() невиртуальный  вызов                                        (можно  инлайнить)   Типовый  анализ   49
  • 50. A a = b? bar() : baz(); … a.foo();   Если  bar() возвращает  только  new B,                  а  baz()                                экземпляры  new С,  то     a.foo() - опять  невиртуальный  вызов                                                        (можно  инлайнить)   Типовый  анализ   50
  • 51.     Откуда  мы  знаем,  что  возвращает  bar() и   baz()?   Типовый  анализ   51
  • 52. •  Глобальный  анализ  –  анализирует  все   методы  программы,  вычисляя  про  каждый   метод  полезную  информацию     •  Результаты  глобального  анализа   используются  для  оптимизации   конкретного  метода       Глобальный  анализ   52
  • 53. •  Все  Java  объекты  создаются  в  динамической   памяти  –  Java  heap  (куча)   •  Большинство  объектов  временные   •  Хочется  их  размещать  на  стэке  метода   •  Escape  анализ  (анализ  утечек)  –  определяет   утекает  ли  объект  в  разделяемую  память.   Аллокация  объектов     на  стэке   53
  • 54. void foo() { for (Object o: getCollection()) { doSomething(o); } } Пример     54
  • 55. void foo() { Iterator iter = getCollection().iterator(); while (iter.hasNext()) { Object o = iter.next(); doSomething(o); } } Пример     55
  • 56. void foo() { ArrayList list = getCollection(); Iterator iter = list.iterator(); while (iter.hasNext()) { Object o = iter.next(); doSomething(o); } } Пример     56
  • 57. void foo() { ArrayList list = getCollection(); ArrayList.ListItr iter = new ListItr(list); while (iter.hasNext()) { Object o = iter.next(); doSomething(o); } } Пример     57
  • 58. void foo() { ArrayList list = getCollection(); ArrayList.ListItr iter = onStack ListItr(); iter.this$0 = list; iter.cursor = 0; iter.size = list.elemData.length; while (iter.hasNext()) { Object o = iter.next(); doSomething(o); } } Пример     58
  • 59. void foo() { ArrayList list = getCollection(); ArrayList.ListItr iter = onStack ListItr(list); iter.this$0 = list; iter.cursor = 0; iter.size = list.elemData.length; while (iter.cursor < iter.size) { int index = iter.cursor++; Object o = iter.this$0.elemData[index]; doSomething(o); } } Пример     59
  • 60. void foo() { ArrayList list = getCollection(); int cursor = 0; int size = list.elemData.length; while (cursor < size) { Object o = list.elemData[cursor++]; doSomething(o); } } Пример     60
  • 61. void foo() { ArrayList list = getCollection(); int size = list.elemData.length; for (int i = 0; i < size; i++) { doSomething(list.elemData[i]); } } Пример     61
  • 62. •  Часто  бывают  довольно  сложными     •  Требуют  итеративного  пересчета   •  Глобальный  анализ  зависит  от  ВСЕЙ  программы.   Анализ  и  оптимизации   62
  • 63. •  Часто  бывают  довольно  сложными     •  Требуют  итеративного  пересчета   •  Глобальный  анализ  зависит  от  ВСЕЙ  программы.   Все  ли  это  может   себе  позволить  JIT?   Анализ  и  оптимизации   63
  • 64. •  Часто  бывают  довольно  сложными     •  Требуют  итеративного  пересчета   •  Глобальный  анализ  зависит  от  ВСЕЙ  программы.   Все  ли  это  может   себе  позволить  JIT?   Анализ  и  оптимизации   64
  • 65. •  Часто  бывают  довольно  сложными     •  Требуют  итеративного  пересчета   •  Глобальный  анализ  зависит  от  ВСЕЙ  программы.   Все  ли  это  может   себе  позволить  JIT?   Анализ  и  оптимизации   65
  • 66. •  Профилировка  и    селективная  компиляция   •  Открытая  подстановка  на  основе  профиля   исполнения     •  Оптимизация  трасс  исполнения   •  Выбор  оптимальных  инструкций   Динамические  оптимизации   66
  • 67. •  А  что  будет,  если  у  приложения  нет  ярко   выраженного  горячего  кода?   •  Долгий  прогрев,  результаты  прогрева  не   используются  при  дальнейших  стартах   приложения   Горячий  код  vs  теплый   67
  • 68. JFCMark  (Short  Run)   0%   50%   100%   150%   200%   250%   2  core  Celeron,  2.60Ghz   4  core  i5,  3.8GZ   Excelsior  JET   HotSpot  client   HotSpot  server   68
  • 69. JFCMark  (Long  Run)   0%   20%   40%   60%   80%   100%   120%   140%   160%   2  core  Celeron,  2.60Ghz   4  core  i5,  3.8GZ   Excelsior  JET   HotSpot  client   HotSpot  server   69
  • 70.   Может  ли  статический  компилятор   использовать  динамический  профиль   исполнения?   Динамические  оптимизации   70
  • 71. Server  side   •  Процессорное  время  в    облаках  –  дорого     •  Через  некоторое  время  работы  сервера   профиль  исполнения  стабилизируется   •  Почему  этот  профиль  не  передать   статическому  компилятору?   71
  • 72. •  Кроме  кода  приложения,  есть  еще  код  JVM   –  Управление  памятью   –  Сборка  мусора   –  Потоки  и  синхронизация   –  Обработка  исключительных  ситуаций   –  …   •  Кроме  Java  кода,  есть  сторонний  код     –  Narve  методы  +  нативные  библиотеки  (в  т.ч.  ОС)   Не  кодом  единым  …   72
  • 73. Embedded   •  Чем  слабее  железо,  тем  дороже   динамическая  компиляция   •  Встроенные  системы  часто  не  обладают   теми  же  вычислительными  мощностями,   что  и  настольные  компьютеры/сервера     73
  • 74. Mobile   •  JVM  on  Mobile:   74
  • 75. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   75
  • 76. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   – GC  и    Memory  Manager   76
  • 77. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   – GC  и    Memory  Manager   – Reflecron   77
  • 78. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   – GC  и    Memory  Manager   – Reflecron   – JIT   78
  • 79. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   – GC  и    Memory  Manager   – Reflecron   – JIT   Чего  не  хватает?   79
  • 80. Mobile   •  JVM  on  Mobile:   – Платформенные  классы   – GC  и    Memory  Manager   – Reflecron   – JIT   Зарядки!     80
  • 81. Mobile   •  У  беспроводных  устройств  есть  БАТАРЕЙКА     •  Стоит  ли  ее  тратить  на  динамическую   компиляцию?   81
  • 82. iOS   •  Политика  распространения  приложений  на   iOS  запрещает  любую  динамическую   загрузку  кода   •  Для  Java  возможен  либо  интерпретатор,   либо  AOT       82
  • 83. AOT  компиляторы  для  Java   GCJ Excelsior JET Android ART RoboVM Avian CodeNameOne IBM J9 Java ME 83
  • 84. 84
  • 85. Статическая  компиляция  Java     •  возможна   –  с  сохранением  всех  возможностей  Java   –   даже  в  присутствии  нестандартных  загрузчиков  классов     •  полезна     –  для  защиты  кода   –  быстрого  старта   –  лучшего  UX   –  улучшения  производительности   –  экономии  батарейки,  памяти,  диска   Итоги   85
  • 86. Вопросы и ответы Никита Липский, Excelsior nlipsky@excelsior-usa.com twitter: @pjBooms 86