Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Java 
худеет. 
Спроси 
меня 
как. 
Никита 
Липский 
twi.er: 
@pjBooms 
Excelsior 
LLC
Java 
полнеет 
35 
30 
25 
20 
15 
10 
5 
0 
JRE 
1.1 
JRE 
1.2 
JRE 
1.3 
JRE 
1.4.0 
JRE 
1.4.2 
JRE 
5.0 
JRE 
6 
JRE 
7 
JRE 
7 
U 
6 
JRE 
8 
JRE 
installer 
size 
on 
Window 
s 
x 
8 
6 
, 
M 
B
Распространение 
Java 
приложений 
• Добавить 
JRE 
в 
системные 
требования 
• Загружать 
JRE 
перед 
установкой 
– Java-­‐aware 
инсталляторы 
• Java 
Web 
Start 
• Включить 
JRE 
в 
инсталляцию 
(private 
JRE) 
– увеличивает 
размер 
на 
15-­‐30 
MB
Размер 
имеет 
значение? 
• Server 
Side 
(Java 
EE) 
– не 
проблема 
• Desktop 
– зависит 
от 
приложения 
• Mobile 
– 30 
MB 
-­‐ 
неприемлемо
Распространение 
Java 
приложений 
Недостающая 
возможность: 
Private 
JRE 
…
Распространение 
Java 
приложений 
Недостающая 
возможность: 
Private 
JRE 
маленького 
размера
Распространение 
Java 
приложений 
Недостающая 
возможность: 
Private 
JRE 
маленького 
размера, 
позволит 
• меньше 
загружать 
из 
интернета 
• сократить 
занимаемое 
на 
диске 
место 
• улучшить 
User 
eXperience
Кто 
знает 
про 
Excelsior 
JET?
Кто 
знает 
про 
Excelsior 
JET? 
Кто ззннааеетт ппрроо Excelsior JET?
Кто 
знает 
про 
Excelsior 
JET? 
• Полная 
реализация 
Java 
SE 
– 
c 
2005 
года 
cертифицирована 
как 
Java 
Compaxble 
• AOT 
compiler 
+ 
Java 
Runxme 
– смешанная 
компиляция: 
AOT 
+ 
JIT 
– поддержка 
нестандартных 
загрузчиков 
классов 
в 
AOT 
режиме 
(для 
Eclipse 
RCP, 
Tomcat) 
• Toolkit 
– Startup 
Opxmizer 
– Deployment
AOT 
+ 
JIT
Small 
Private 
JRE
Small 
Private 
JRE 
Наблюдение: 
приложение 
использует 
далеко 
не 
все, 
что 
есть 
в 
private 
JRE.
Small 
Private 
JRE 
Наблюдение: 
приложение 
использует 
далеко 
не 
все, 
что 
есть 
в 
private 
JRE. 
Решение: 
удалить 
ненужные 
классы!
Small 
Private 
JRE 
Наблюдение: 
приложение 
использует 
далеко 
не 
все, 
что 
есть 
в 
private 
JRE. 
Решение: 
удалить 
ненужные 
классы! 
Вопрос: 
а 
какие 
классы 
-­‐ 
ненужные?
“Ненужные” 
классы 
Класс 
не 
нужен, 
если 
он 
не 
является 
нужным
Нужные 
классы
Нужные 
классы 
• java.lang.Object 
– 
нужен
• java.lang.Object 
– 
нужен 
• класс 
импортированный 
нужным, 
тоже 
нужен 
Нужные 
классы
Нужные 
классы 
• java.lang.Object 
– 
нужен 
• класс 
импортированный 
нужным, 
тоже 
нужен 
• замыкание 
импорта 
Object 
содержит...
Нужные 
классы 
• java.lang.Object 
– 
нужен 
• класс 
импортированный 
нужным, 
тоже 
нужен 
• замыкание 
импорта 
Object 
содержит 
3541 
класс 
(для 
Java 
8u20)
• Замыкание 
Нужные 
классы 
java.lang.* 
+ 
JVM 
specific: 
3948 
классов 
• java.lang, 
java.io, 
java.uxl, 
etc.: 
4797 
классов
Нужные 
классы 
class 
ForName 
{ 
public 
staxc 
void 
main(String 
args[]) 
{ 
Class 
c 
= 
Class.forName(args[0]); 
… 
} 
} 
Какие 
классы 
нужны 
этой 
программе?
• При 
Нужные 
классы 
доступе 
через 
JNI 
и/или 
Reflecxon, 
неясно: 
– нужны 
ли 
еще 
классы? 
– если 
да, 
то 
какие?
Нужные 
методы 
public 
staxc 
String 
foo(Object 
o) 
{ 
return 
o.toString(); 
} 
Какие 
методы 
(каких 
классов) 
нужны?
Ранние 
попытки 
уменьшить 
JRE 
• Excelsior 
– single 
executable 
– оптимизация 
в 
предположении 
“замкнутости 
мира” 
• Sun 
Microsystems 
– Sun 
Java 
Kernel 
(Consumer 
JRE) 
• Остальные 
реализации 
Java? 
– 
не 
важно 
для 
Java 
ME, 
Java 
EE
Sun 
Java 
Kernel
Sun 
Java 
Kernel 
(2008) 
Идея: 
установить 
минимум 
и 
загружать 
по 
мере 
необходимости, 
пока 
не 
получится 
полное 
JRE 
Ожидаемый 
результат: 
быстрый 
старт 
приложения 
на 
машине, 
где 
нет 
Java
Sun 
Java 
Kernel 
Реальность: 
1. Выкачивается 
инсталлятор 
в 
900KB
Sun 
Java 
Kernel 
Реальность: 
2. Загруженный 
инсталлятор, 
выкачивает 
другой 
инсталлятор 
в 
12MB!
Sun 
Java 
Kernel 
Реальность: 
3. Затем 
Java 
Kernel 
загружает 
сразу 
еще 
5MB 
(13MB 
+ 
5MB 
> 
16MB 
-­‐ 
обычное 
JRE 
6)
Sun 
Java 
Kernel 
Реальность: 
4. И 
продолжает 
что-­‐то 
качать 
…
Single 
Executable
Проблемы 
1. “Клубки" 
импорта 
2. Виртуальные 
вызовы 
3. Мета-­‐доступ
Наблюдения 
1. Не 
все 
методы 
“нужного” 
класса 
исполняются 
2. Instance-­‐методы 
не 
могут 
исполняться, 
если 
не 
создан 
экземпляр 
класса 
(или 
его 
наследника) 
– new T()
Rapid 
Type 
Analysis* 
• Поиск 
достижимых 
методов 
– Начиная 
с 
точек 
входа, 
строим 
граф 
вызовов 
– Анализируем 
код 
методов, 
накапливая 
main 
C.foo() 
B.bar() 
LiveClasses 
VirtCallSites 
new 
T() 
c.bar() 
new 
B() 
b.foo() 
* Идея принадлежит D.F. Bacon @ IBM
Rapid 
Type 
Analysis* 
• при 
расширении 
LiveClasses 
– 
добавляем 
instance-­‐методы 
в 
граф 
согласно 
VirtCallSites 
• при 
расширении 
VirtCallSites 
– 
добавляем 
instance-­‐методы 
в 
граф 
согласно 
LiveClasses 
• достигаем 
неподвижной 
точки
Rapid 
Type 
Analysis* 
• Эффективен 
– 
для 
«прореживания» 
библиотек 
• Масштабируем 
– линейная 
сложность 
от 
числа 
операторов 
– существует 
реализация, 
обрабатывающая 
более 
40,000 
классов 
за 
2 
минуты
Нужные 
классы 
Класс 
нужен, 
если 
он 
содержит 
достижимые 
методы 
(по 
результатам 
RTA)
Глобальный 
анализатор 
Application 
Java SE API 
Entry points 
- used 
- not used
Reflecxon 
& 
JNI?
Reflecxon 
& 
JNI? 
• Пробный 
запуск 
(off-­‐line 
profiling) 
• Дополняет 
множества 
– точек 
входа 
– LiveClasses 
– VirtCallSites
Результаты 
• Размер 
исполняемого 
файла 
без 
зависимостей: 
– Hello 
World 
~800 
KB 
– SWT 
Example 
~1.4 
MB 
• При 
агрессивном 
удалении 
«ненужных» 
методов 
и 
их 
метаинформации
JetPerfect 
(2001) 
Не 
такой 
уж 
perfect: 
– не 
соответствует 
Java 
SE 
спецификации 
– труден 
в 
использовании 
– приложения 
«не 
всегда 
работают» 
– возникающие 
(у 
конечного 
пользователя) 
ошибки 
не 
диагностируемы
Java 
Runxme 
Slim-­‐Down
Java 
Runxme 
Slim-­‐Down 
(2007) 
• Глобально 
оптимизированный 
исполняемый 
файл 
– «нужные» 
классы 
приложения 
и 
Java 
платформы 
оптимизируются 
совместно 
• Оставшиеся 
классы 
– не 
удаляются 
– остается 
возможность 
загружать 
их 
через 
JIT
Java 
Runxme 
Slim-­‐Down 
• Java 
SE 
API 
делится 
на 
компоненты: 
– Kernel, 
XML, 
SQL, 
CORBA, 
AWT/Java2D, 
Swing, 
etc. 
• анализатор 
определяет 
какие 
компоненты 
“нужны” 
– содержат 
достижимые 
методы
Глобальный 
анализатор 
Application 
Java SE API 
Entry points 
- used 
- not used 
- component’s boundary
Java 
Runxme 
Slim-­‐Down 
• Пользователю 
предоставляются: 
– результаты 
анализа 
c 
возможностью 
исключить 
неиспользуемые 
компоненты
Java 
Runxme 
Slim-­‐Down 
• Исключенные 
компоненты: 
– помещаются 
на 
веб-­‐сервер 
(доступны 
приложению) 
– загружаются 
VM 
по 
требованию 
• Соответствует 
Java 
SE 
спецификации!
Результаты
On 
GUI 
toolkits 
• Экономия 
в 
размере 
незначительна, 
если 
используется 
Java2D, 
AWT/Swing 
• Что 
делать?
On 
GUI 
toolkits 
• Экономия 
в 
размере 
незначительна, 
если 
используется 
Java2D, 
AWT/Swing 
• Что 
делать? 
• Java 
Core 
+ 
alternaxve 
GUI 
toolkit
Java 
Core 
+ 
alternaxve 
GUI
Java 
Core 
+ 
alternaxve 
GUI 
Фрагментация 
Java
Java 
Core 
+ 
alternaxve 
GUI 
• SWT/JFace 
• eSWT 
• Java 
OpenGL 
• JavaFX 
– уже 
входит 
в 
платформу!
JavaFX 
Packager 
vs. 
Runxme 
Slim-­‐Down 
JavaFX 
naxve 
Packager 
Java 
Runxme 
Slim-­‐Down 
Ensemble 
Demo 
34 
MB 
19 
MB 
BrickBreaker 
30 
MB 
13 
MB 
Замечание: 
размеры 
дистрибутивов 
для 
Windows 
для 
Java 
7, 
JavaFX 
зависел 
от 
AWT 
в 
Java 
7
Java 
Runxme 
Slim-­‐Down: 
уроки 
• Компонентная 
модель 
JRE 
для 
уменьшения 
приватного 
Java 
Runxme 
– жизнеспособна 
– работает 
• Проверено 
временем
Проект 
Jigsaw
Проект 
Jigsaw 
• Java 
Module 
System 
h.p://openjdk.java.net/projects/jigsaw 
• Модуляризация 
JRE 
– разбиение 
на 
компоненты 
– устранение 
лишних 
зависимостей 
– перевод 
на 
Module 
System
Прототип 
Java 
Module 
System 
• Доступен 
по 
h.p://jdk8.java.net/jigsaw/ 
• module-info.java 
– описывает 
зависимости 
модуля 
(JLS, 
JVM) 
• .jmod 
-­‐ 
бинарный 
формат 
модуля 
• jpkg 
-­‐ 
инструмент 
для 
упаковки 
модуля 
– использует 
pack200, 
7z, 
bzip 
• javac, jmod 
– 
статическое 
управление 
зависимостями 
• java –m ... 
-­‐ 
модульный 
режим 
запуска
Jigsaw: 
модуляризация 
JRE 
• Планы: 
J 
Ä 
Java8 
Ä 
• Почему 
так 
долго? 
-­‐ 
объективные 
причины
Jigsaw: 
трудности 
перевода
Jigsaw: 
трудности 
перевода
Jigsaw: 
проблемы 
прототипа 
• Многие 
зависимости 
убраны, 
но 
многие 
еще 
осталось 
– процесс 
оказался 
очень 
трудоёмкий 
• Проблемы 
с 
обратной 
совместимостью 
– getClassLoader() == null 
– Class.forName() 
и 
правила 
видимости 
– classloader 
delegaxon
Jigsaw: 
текущий 
статус 
• Определены 
новые 
требования 
– обратная 
совместимость 
– 
«cвященная 
корова» 
• Платформенные 
модули 
отличаются 
от 
пользовательских 
– нельзя 
подключать 
два 
платформенных 
модуля 
с 
одной 
функциональностью 
разных 
версий 
– для 
пользовательских 
модулей 
-­‐ 
можно
• Не 
Jigsaw: 
текущий 
статус 
будет 
клона 
Maven, 
Ivy, 
Gradle 
• Поддержка 
нативных 
пакетных 
мэнеджеров 
– Java 
модуль 
можно 
поставить 
через 
rpm, 
yum, 
etc. 
– без 
поддержки 
Mac, 
Windows 
– для 
Mac, 
Windows 
будет 
инструмент 
паковки 
в 
нативный 
инсталлятор 
• AOT 
компиляция 
Java 
модулей 
– если 
будет 
найден 
proof 
of 
concept
JEP-­‐161 
(Compact 
Profiles) 
• Замена 
Java 
ME 
CDC 
• 3 
профиля: 
Compact1 
Compact2 
Compact3 
java.lang 
java.rmi 
java.lang.instrument 
java.io 
java.sql 
java.lang.management 
java.math 
javax.transacxon 
javax.management 
java.nio 
javax.xml 
javax.naming 
java.uxl 
org.w3c.dom 
javax.script 
java.net 
org.xml.sax 
javax.security 
java.security 
javax.sql 
javax.crypto 
javax.xml.crypto 
java.text 
org.ie¯.jgss
Compact 
Profiles: 
инструменты 
• jdeps 
– 
инструмент 
статического 
анализа 
зависимостей 
приложения 
• javac –profile 
– 
предупреждает 
о 
зависимостях 
вне 
указанного 
профиля 
• jrecreate 
– 
создает 
нужный 
компактный 
профиль 
– Есть 
только 
в 
Java 
SE 
Embedded!
Compact 
Profiles: 
размеры 
• Compact1: 
11MB 
• Compact2: 
15MB 
• Compact3: 
21MB 
• Full 
JRE: 
49MB 
Замечание: 
размеры 
на 
диске 
(ROM)
JEP-­‐178 
(Staxcally-­‐Linked 
JNI 
libraries) 
• Распространение 
без 
динамических 
библиотек 
– реализация 
naxve-­‐методов 
линкуется 
к 
JVM 
– 
единый 
исполняемый 
файл 
• Преодоление 
существующих 
барьеров 
– требования 
Apple 
AppStore
Заключение 
• Компонентная 
модель 
JRE 
– жизнеспособна 
• Перевод 
JRE 
на 
модульную 
систему 
– статический 
импорт 
(без 
лишних 
зависимостей) 
– требует 
времени 
• Путь 
Java 
to 
Mobile 
– модульность: 
Java 
core 
+ 
JavaFX 
– AOT 
компиляция 
+ 
JEP-­‐178
Вопросы и ответы 
Никита Липский, 
Excelsior 
nlipsky@excelsior-usa.com 
twitter: @pjBooms

More Related Content

Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.

  • 1. Java худеет. Спроси меня как. Никита Липский twi.er: @pjBooms Excelsior LLC
  • 2. Java полнеет 35 30 25 20 15 10 5 0 JRE 1.1 JRE 1.2 JRE 1.3 JRE 1.4.0 JRE 1.4.2 JRE 5.0 JRE 6 JRE 7 JRE 7 U 6 JRE 8 JRE installer size on Window s x 8 6 , M B
  • 3. Распространение Java приложений • Добавить JRE в системные требования • Загружать JRE перед установкой – Java-­‐aware инсталляторы • Java Web Start • Включить JRE в инсталляцию (private JRE) – увеличивает размер на 15-­‐30 MB
  • 4. Размер имеет значение? • Server Side (Java EE) – не проблема • Desktop – зависит от приложения • Mobile – 30 MB -­‐ неприемлемо
  • 5. Распространение Java приложений Недостающая возможность: Private JRE …
  • 6. Распространение Java приложений Недостающая возможность: Private JRE маленького размера
  • 7. Распространение Java приложений Недостающая возможность: Private JRE маленького размера, позволит • меньше загружать из интернета • сократить занимаемое на диске место • улучшить User eXperience
  • 8. Кто знает про Excelsior JET?
  • 9. Кто знает про Excelsior JET? Кто ззннааеетт ппрроо Excelsior JET?
  • 10. Кто знает про Excelsior JET? • Полная реализация Java SE – c 2005 года cертифицирована как Java Compaxble • AOT compiler + Java Runxme – смешанная компиляция: AOT + JIT – поддержка нестандартных загрузчиков классов в AOT режиме (для Eclipse RCP, Tomcat) • Toolkit – Startup Opxmizer – Deployment
  • 13. Small Private JRE Наблюдение: приложение использует далеко не все, что есть в private JRE.
  • 14. Small Private JRE Наблюдение: приложение использует далеко не все, что есть в private JRE. Решение: удалить ненужные классы!
  • 15. Small Private JRE Наблюдение: приложение использует далеко не все, что есть в private JRE. Решение: удалить ненужные классы! Вопрос: а какие классы -­‐ ненужные?
  • 16. “Ненужные” классы Класс не нужен, если он не является нужным
  • 18. Нужные классы • java.lang.Object – нужен
  • 19. • java.lang.Object – нужен • класс импортированный нужным, тоже нужен Нужные классы
  • 20. Нужные классы • java.lang.Object – нужен • класс импортированный нужным, тоже нужен • замыкание импорта Object содержит...
  • 21. Нужные классы • java.lang.Object – нужен • класс импортированный нужным, тоже нужен • замыкание импорта Object содержит 3541 класс (для Java 8u20)
  • 22. • Замыкание Нужные классы java.lang.* + JVM specific: 3948 классов • java.lang, java.io, java.uxl, etc.: 4797 классов
  • 23. Нужные классы class ForName { public staxc void main(String args[]) { Class c = Class.forName(args[0]); … } } Какие классы нужны этой программе?
  • 24. • При Нужные классы доступе через JNI и/или Reflecxon, неясно: – нужны ли еще классы? – если да, то какие?
  • 25. Нужные методы public staxc String foo(Object o) { return o.toString(); } Какие методы (каких классов) нужны?
  • 26. Ранние попытки уменьшить JRE • Excelsior – single executable – оптимизация в предположении “замкнутости мира” • Sun Microsystems – Sun Java Kernel (Consumer JRE) • Остальные реализации Java? – не важно для Java ME, Java EE
  • 28. Sun Java Kernel (2008) Идея: установить минимум и загружать по мере необходимости, пока не получится полное JRE Ожидаемый результат: быстрый старт приложения на машине, где нет Java
  • 29. Sun Java Kernel Реальность: 1. Выкачивается инсталлятор в 900KB
  • 30. Sun Java Kernel Реальность: 2. Загруженный инсталлятор, выкачивает другой инсталлятор в 12MB!
  • 31. Sun Java Kernel Реальность: 3. Затем Java Kernel загружает сразу еще 5MB (13MB + 5MB > 16MB -­‐ обычное JRE 6)
  • 32. Sun Java Kernel Реальность: 4. И продолжает что-­‐то качать …
  • 34. Проблемы 1. “Клубки" импорта 2. Виртуальные вызовы 3. Мета-­‐доступ
  • 35. Наблюдения 1. Не все методы “нужного” класса исполняются 2. Instance-­‐методы не могут исполняться, если не создан экземпляр класса (или его наследника) – new T()
  • 36. Rapid Type Analysis* • Поиск достижимых методов – Начиная с точек входа, строим граф вызовов – Анализируем код методов, накапливая main C.foo() B.bar() LiveClasses VirtCallSites new T() c.bar() new B() b.foo() * Идея принадлежит D.F. Bacon @ IBM
  • 37. Rapid Type Analysis* • при расширении LiveClasses – добавляем instance-­‐методы в граф согласно VirtCallSites • при расширении VirtCallSites – добавляем instance-­‐методы в граф согласно LiveClasses • достигаем неподвижной точки
  • 38. Rapid Type Analysis* • Эффективен – для «прореживания» библиотек • Масштабируем – линейная сложность от числа операторов – существует реализация, обрабатывающая более 40,000 классов за 2 минуты
  • 39. Нужные классы Класс нужен, если он содержит достижимые методы (по результатам RTA)
  • 40. Глобальный анализатор Application Java SE API Entry points - used - not used
  • 42. Reflecxon & JNI? • Пробный запуск (off-­‐line profiling) • Дополняет множества – точек входа – LiveClasses – VirtCallSites
  • 43. Результаты • Размер исполняемого файла без зависимостей: – Hello World ~800 KB – SWT Example ~1.4 MB • При агрессивном удалении «ненужных» методов и их метаинформации
  • 44. JetPerfect (2001) Не такой уж perfect: – не соответствует Java SE спецификации – труден в использовании – приложения «не всегда работают» – возникающие (у конечного пользователя) ошибки не диагностируемы
  • 46. Java Runxme Slim-­‐Down (2007) • Глобально оптимизированный исполняемый файл – «нужные» классы приложения и Java платформы оптимизируются совместно • Оставшиеся классы – не удаляются – остается возможность загружать их через JIT
  • 47. Java Runxme Slim-­‐Down • Java SE API делится на компоненты: – Kernel, XML, SQL, CORBA, AWT/Java2D, Swing, etc. • анализатор определяет какие компоненты “нужны” – содержат достижимые методы
  • 48. Глобальный анализатор Application Java SE API Entry points - used - not used - component’s boundary
  • 49. Java Runxme Slim-­‐Down • Пользователю предоставляются: – результаты анализа c возможностью исключить неиспользуемые компоненты
  • 50. Java Runxme Slim-­‐Down • Исключенные компоненты: – помещаются на веб-­‐сервер (доступны приложению) – загружаются VM по требованию • Соответствует Java SE спецификации!
  • 52. On GUI toolkits • Экономия в размере незначительна, если используется Java2D, AWT/Swing • Что делать?
  • 53. On GUI toolkits • Экономия в размере незначительна, если используется Java2D, AWT/Swing • Что делать? • Java Core + alternaxve GUI toolkit
  • 54. Java Core + alternaxve GUI
  • 55. Java Core + alternaxve GUI Фрагментация Java
  • 56. Java Core + alternaxve GUI • SWT/JFace • eSWT • Java OpenGL • JavaFX – уже входит в платформу!
  • 57. JavaFX Packager vs. Runxme Slim-­‐Down JavaFX naxve Packager Java Runxme Slim-­‐Down Ensemble Demo 34 MB 19 MB BrickBreaker 30 MB 13 MB Замечание: размеры дистрибутивов для Windows для Java 7, JavaFX зависел от AWT в Java 7
  • 58. Java Runxme Slim-­‐Down: уроки • Компонентная модель JRE для уменьшения приватного Java Runxme – жизнеспособна – работает • Проверено временем
  • 60. Проект Jigsaw • Java Module System h.p://openjdk.java.net/projects/jigsaw • Модуляризация JRE – разбиение на компоненты – устранение лишних зависимостей – перевод на Module System
  • 61. Прототип Java Module System • Доступен по h.p://jdk8.java.net/jigsaw/ • module-info.java – описывает зависимости модуля (JLS, JVM) • .jmod -­‐ бинарный формат модуля • jpkg -­‐ инструмент для упаковки модуля – использует pack200, 7z, bzip • javac, jmod – статическое управление зависимостями • java –m ... -­‐ модульный режим запуска
  • 62. Jigsaw: модуляризация JRE • Планы: J Ä Java8 Ä • Почему так долго? -­‐ объективные причины
  • 65. Jigsaw: проблемы прототипа • Многие зависимости убраны, но многие еще осталось – процесс оказался очень трудоёмкий • Проблемы с обратной совместимостью – getClassLoader() == null – Class.forName() и правила видимости – classloader delegaxon
  • 66. Jigsaw: текущий статус • Определены новые требования – обратная совместимость – «cвященная корова» • Платформенные модули отличаются от пользовательских – нельзя подключать два платформенных модуля с одной функциональностью разных версий – для пользовательских модулей -­‐ можно
  • 67. • Не Jigsaw: текущий статус будет клона Maven, Ivy, Gradle • Поддержка нативных пакетных мэнеджеров – Java модуль можно поставить через rpm, yum, etc. – без поддержки Mac, Windows – для Mac, Windows будет инструмент паковки в нативный инсталлятор • AOT компиляция Java модулей – если будет найден proof of concept
  • 68. JEP-­‐161 (Compact Profiles) • Замена Java ME CDC • 3 профиля: Compact1 Compact2 Compact3 java.lang java.rmi java.lang.instrument java.io java.sql java.lang.management java.math javax.transacxon javax.management java.nio javax.xml javax.naming java.uxl org.w3c.dom javax.script java.net org.xml.sax javax.security java.security javax.sql javax.crypto javax.xml.crypto java.text org.ie¯.jgss
  • 69. Compact Profiles: инструменты • jdeps – инструмент статического анализа зависимостей приложения • javac –profile – предупреждает о зависимостях вне указанного профиля • jrecreate – создает нужный компактный профиль – Есть только в Java SE Embedded!
  • 70. Compact Profiles: размеры • Compact1: 11MB • Compact2: 15MB • Compact3: 21MB • Full JRE: 49MB Замечание: размеры на диске (ROM)
  • 71. JEP-­‐178 (Staxcally-­‐Linked JNI libraries) • Распространение без динамических библиотек – реализация naxve-­‐методов линкуется к JVM – единый исполняемый файл • Преодоление существующих барьеров – требования Apple AppStore
  • 72. Заключение • Компонентная модель JRE – жизнеспособна • Перевод JRE на модульную систему – статический импорт (без лишних зависимостей) – требует времени • Путь Java to Mobile – модульность: Java core + JavaFX – AOT компиляция + JEP-­‐178
  • 73. Вопросы и ответы Никита Липский, Excelsior nlipsky@excelsior-usa.com twitter: @pjBooms