SlideShare une entreprise Scribd logo
1  sur  87
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модулиZheka Kozlov
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
AOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesAOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesNikita Lipsky
 
Эволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингЭволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингzfconfua
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0zfconfua
 
Actor model. Futures & Promises. Reactive Streams.
Actor model. Futures & Promises. Reactive Streams.Actor model. Futures & Promises. Reactive Streams.
Actor model. Futures & Promises. Reactive Streams.Vadim Tsesko
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
01 - Java. Введение в Java
01 - Java. Введение в Java01 - Java. Введение в Java
01 - Java. Введение в JavaRoman Brovko
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
 
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 8DefconRussia
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 

Tendances (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
 

En vedette

διαχείριση χρόνου
διαχείριση χρόνουδιαχείριση χρόνου
διαχείριση χρόνουpharmasavegr
 
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalent
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalentDag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalent
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalentREC Radiocentrum
 
Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010boazwachtel
 
Τέσσερα κείμενα με θέμα την Παιδεία
Τέσσερα κείμενα με θέμα την ΠαιδείαΤέσσερα κείμενα με θέμα την Παιδεία
Τέσσερα κείμενα με θέμα την ΠαιδείαEleni Kots
 
ΕΛΕΥΘΕΡΙΑ
ΕΛΕΥΘΕΡΙΑΕΛΕΥΘΕΡΙΑ
ΕΛΕΥΘΕΡΙΑEleni Kots
 
Eπιρρηματικοί προσδιορισμοί
Eπιρρηματικοί προσδιορισμοίEπιρρηματικοί προσδιορισμοί
Eπιρρηματικοί προσδιορισμοίmara_petridou
 
Peripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius eventPeripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius eventAggeliki Nikolaou
 
Are you Ready for Major Gifts?
Are you Ready for Major Gifts?Are you Ready for Major Gifts?
Are you Ready for Major Gifts?Kristina Jones
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция JavaTech Talks @NSU
 
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣ
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣΚΑΤΑΝΑΛΩΤΙΣΜΟΣ
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣEleni Kots
 
Smau Napoli 2016 Corporate Meeting - Atena Scarl
Smau Napoli 2016 Corporate Meeting - Atena ScarlSmau Napoli 2016 Corporate Meeting - Atena Scarl
Smau Napoli 2016 Corporate Meeting - Atena ScarlSMAU
 
διαφημιση
διαφημισηδιαφημιση
διαφημισηEleni Kots
 
Give me a website i control today
Give me a website i control  todayGive me a website i control  today
Give me a website i control todayColin Harrison
 
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣ
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣTA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣ
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣsomakris
 
H μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιοH μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιοΑλμπανάκη Ξανθή
 

En vedette (20)

Quest
QuestQuest
Quest
 
Patrick ten Brink of IEEP on IPBES an economists perspective EP 29 May 2012 f...
Patrick ten Brink of IEEP on IPBES an economists perspective EP 29 May 2012 f...Patrick ten Brink of IEEP on IPBES an economists perspective EP 29 May 2012 f...
Patrick ten Brink of IEEP on IPBES an economists perspective EP 29 May 2012 f...
 
διαχείριση χρόνου
διαχείριση χρόνουδιαχείριση χρόνου
διαχείριση χρόνου
 
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalent
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalentDag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalent
Dag van de Cultuureducatie: ontdekken, vormen en doorstromen van radiotalent
 
Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010Roots Ltd -Executive Summary May 2010
Roots Ltd -Executive Summary May 2010
 
Τέσσερα κείμενα με θέμα την Παιδεία
Τέσσερα κείμενα με θέμα την ΠαιδείαΤέσσερα κείμενα με θέμα την Παιδεία
Τέσσερα κείμενα με θέμα την Παιδεία
 
ΕΛΕΥΘΕΡΙΑ
ΕΛΕΥΘΕΡΙΑΕΛΕΥΘΕΡΙΑ
ΕΛΕΥΘΕΡΙΑ
 
Eπιρρηματικοί προσδιορισμοί
Eπιρρηματικοί προσδιορισμοίEπιρρηματικοί προσδιορισμοί
Eπιρρηματικοί προσδιορισμοί
 
Taller profes 1.1
Taller profes 1.1Taller profes 1.1
Taller profes 1.1
 
Peripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius eventPeripatetic Learning Sagittarius event
Peripatetic Learning Sagittarius event
 
Are you Ready for Major Gifts?
Are you Ready for Major Gifts?Are you Ready for Major Gifts?
Are you Ready for Major Gifts?
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция Java
 
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣ
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣΚΑΤΑΝΑΛΩΤΙΣΜΟΣ
ΚΑΤΑΝΑΛΩΤΙΣΜΟΣ
 
Smau Napoli 2016 Corporate Meeting - Atena Scarl
Smau Napoli 2016 Corporate Meeting - Atena ScarlSmau Napoli 2016 Corporate Meeting - Atena Scarl
Smau Napoli 2016 Corporate Meeting - Atena Scarl
 
Lar calc10 ch04_sec3
Lar calc10 ch04_sec3Lar calc10 ch04_sec3
Lar calc10 ch04_sec3
 
διαφημιση
διαφημισηδιαφημιση
διαφημιση
 
Give me a website i control today
Give me a website i control  todayGive me a website i control  today
Give me a website i control today
 
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣ
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣTA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣ
TA ΠΕΤΡΟΓΕΦΥΡΑ ΤΗΣ ΞΑΝΘΗΣ
 
ΕΡΩΤΗΜΑΤΟΛΟΓΙΟ......ΣΥΜΠΕΡΙΦΟΡΑ ΤΟΥ ΠΩΛΗΤΗ ΣΤΟ ΜLM
ΕΡΩΤΗΜΑΤΟΛΟΓΙΟ......ΣΥΜΠΕΡΙΦΟΡΑ ΤΟΥ ΠΩΛΗΤΗ ΣΤΟ ΜLMΕΡΩΤΗΜΑΤΟΛΟΓΙΟ......ΣΥΜΠΕΡΙΦΟΡΑ ΤΟΥ ΠΩΛΗΤΗ ΣΤΟ ΜLM
ΕΡΩΤΗΜΑΤΟΛΟΓΙΟ......ΣΥΜΠΕΡΙΦΟΡΑ ΤΟΥ ΠΩΛΗΤΗ ΣΤΟ ΜLM
 
H μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιοH μετάβαση απο την βιοηθική στο βιοδίκαιο
H μετάβαση απο την βιοηθική στο βιοδίκαιο
 

Similaire à Tech Talks @NSU: AOT-компиляция Java

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
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 Alexander Syrotenko
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Nikita Lipsky
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9JavaDayUA
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Anton Arhipov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокRoman_Lut
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Development User Group
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C codeDenis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейAnton Arhipov
 
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 ForgeYehor Herasymchuk
 
20100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture0520100307 virtualization igotti_lecture05
20100307 virtualization igotti_lecture05Computer Science Club
 

Similaire à Tech Talks @NSU: 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
 

Plus 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
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналамTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьTech Talks @NSU
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном миреTech Talks @NSU
 
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: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применение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: Что такое работа в техподдержке: тяжело ли живётся саппортеру
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
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU
 
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: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Tech Talks @NSU
 

Plus 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. реальность
 

Tech Talks @NSU: 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