Тестирование ПО, основанного на сторонних компонентах, на примере дистрибутива ОС Linux
Java худеет. Спроси меня как. Уменьшение размера...
-
Upload
nikita-lipsky -
Category
Software
-
view
335 -
download
1
description
Transcript of Java худеет. Спроси меня как. Уменьшение размера...
![Page 1: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/1.jpg)
Java худеет. Спроси меня как. Никита Липский twi.er: @pjBooms
Excelsior LLC
![Page 2: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/2.jpg)
Java полнеет
0
5
10
15
20
25
30
35
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 Windows x86, MB
![Page 3: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/3.jpg)
Распространение Java приложений
• Добавить JRE в системные требования
• Загружать JRE перед установкой – Java-‐aware инсталляторы
• Java Web Start
• Включить JRE в инсталляцию (private JRE) – увеличивает размер на 15-‐30 MB
![Page 4: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/4.jpg)
Размер имеет значение?
• Server Side (Java EE) – не проблема
• Desktop – зависит от приложения
• Mobile – 30 MB -‐ неприемлемо
![Page 5: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/5.jpg)
Распространение Java приложений
Недостающая возможность: Private JRE …
![Page 6: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/6.jpg)
Распространение Java приложений
Недостающая возможность: Private JRE маленького размера
![Page 7: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/7.jpg)
Распространение Java приложений
Недостающая возможность: Private JRE маленького размера, позволит • меньше загружать из интернета • сократить занимаемое на диске место • улучшить User eXperience
![Page 8: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/8.jpg)
Кто знает про Excelsior JET?
![Page 9: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/9.jpg)
Кто знает про Excelsior JET?
Кто знает про Excelsior JET? Кто знает про Excelsior JET?
![Page 10: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/10.jpg)
Кто знает про Excelsior JET? • Полная реализация Java SE
– c 2005 года cертифицирована как Java Compaxble
• AOT compiler + Java Runxme – смешанная компиляция: AOT + JIT – поддержка нестандартных загрузчиков классов в AOT режиме (для Eclipse RCP, Tomcat)
• Toolkit
– Startup Opxmizer – Deployment
![Page 11: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/11.jpg)
AOT + JIT
![Page 12: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/12.jpg)
Small Private JRE
![Page 13: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/13.jpg)
Small Private JRE
Наблюдение: приложение использует далеко не все, что есть в private JRE.
![Page 14: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/14.jpg)
Small Private JRE
Наблюдение: приложение использует далеко не все, что есть в private JRE.
Решение: удалить ненужные классы!
![Page 15: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/15.jpg)
Small Private JRE
Наблюдение: приложение использует далеко не все, что есть в private JRE.
Решение: удалить ненужные классы! Вопрос: а какие классы -‐ ненужные?
![Page 16: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/16.jpg)
“Ненужные” классы
Класс не нужен,
если он не является нужным
![Page 17: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/17.jpg)
Нужные классы
![Page 18: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/18.jpg)
• java.lang.Object – нужен
Нужные классы
![Page 19: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/19.jpg)
• java.lang.Object – нужен
• класс импортированный нужным, тоже нужен
Нужные классы
![Page 20: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/20.jpg)
• java.lang.Object – нужен
• класс импортированный нужным, тоже нужен
• замыкание импорта Object содержит...
Нужные классы
![Page 21: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/21.jpg)
• java.lang.Object – нужен
• класс импортированный нужным, тоже нужен
• замыкание импорта Object содержит 3541 класс (для Java 8u20)
Нужные классы
![Page 22: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/22.jpg)
• Замыкание java.lang.* + JVM specific: 3948 классов
• java.lang, java.io, java.uxl, etc.:
4797 классов
Нужные классы
![Page 23: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/23.jpg)
class ForName { public staxc void main(String args[]) { Class c = Class.forName(args[0]); … } } Какие классы нужны этой программе?
Нужные классы
![Page 24: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/24.jpg)
• При доступе через JNI и/или Reflecxon, неясно: – нужны ли еще классы? – если да, то какие?
Нужные классы
![Page 25: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/25.jpg)
Нужные методы
public staxc String foo(Object o) { return o.toString(); } Какие методы (каких классов) нужны?
![Page 26: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/26.jpg)
Ранние попытки уменьшить JRE
• Excelsior – single executable – оптимизация в предположении “замкнутости мира”
• Sun Microsystems – Sun Java Kernel (Consumer JRE)
• Остальные реализации Java? – не важно для Java ME, Java EE
![Page 27: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/27.jpg)
Sun Java Kernel
![Page 28: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/28.jpg)
Sun Java Kernel (2008)
Идея: установить минимум и загружать по мере необходимости, пока не получится полное JRE
Ожидаемый результат: быстрый старт приложения на машине, где нет Java
![Page 29: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/29.jpg)
Sun Java Kernel
Реальность: 1. Выкачивается инсталлятор в 900KB
![Page 30: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/30.jpg)
Sun Java Kernel
Реальность: 2. Загруженный инсталлятор, выкачивает
другой инсталлятор в 12MB!
![Page 31: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/31.jpg)
Sun Java Kernel
Реальность: 3. Затем Java Kernel загружает сразу еще 5MB
(13MB + 5MB > 16MB -‐ обычное JRE 6)
![Page 32: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/32.jpg)
Sun Java Kernel
Реальность: 4. И продолжает что-‐то качать …
![Page 33: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/33.jpg)
Single Executable
![Page 34: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/34.jpg)
Проблемы
1. “Клубки" импорта
2. Виртуальные вызовы
3. Мета-‐доступ
![Page 35: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/35.jpg)
Наблюдения
1. Не все методы “нужного” класса исполняются
2. Instance-‐методы не могут исполняться, если не создан экземпляр класса (или его наследника)
– new T()
![Page 36: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/36.jpg)
Rapid Type Analysis*
• Поиск достижимых методов – Начиная с точек входа, строим граф вызовов
– Анализируем код методов, накапливая
main C.foo()
B.bar()
LiveClasses VirtCallSites new T() c.bar() new B() b.foo()
* Идея принадлежит D.F. Bacon @ IBM
![Page 37: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/37.jpg)
Rapid Type Analysis*
• при расширении LiveClasses – добавляем instance-‐методы в граф согласно VirtCallSites
• при расширении VirtCallSites – добавляем instance-‐методы в граф согласно LiveClasses
• достигаем неподвижной точки
![Page 38: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/38.jpg)
Rapid Type Analysis*
• Эффективен – для «прореживания» библиотек
• Масштабируем – линейная сложность от числа операторов – существует реализация, обрабатывающая более 40,000 классов за 2 минуты
![Page 39: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/39.jpg)
Нужные классы
Класс нужен, если он содержит
достижимые методы (по результатам RTA)
![Page 40: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/40.jpg)
Глобальный анализатор
Application
Java SE API
Entry points - used - not used
![Page 41: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/41.jpg)
Reflecxon & JNI?
![Page 42: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/42.jpg)
Reflecxon & JNI?
• Пробный запуск (off-‐line profiling)
• Дополняет множества – точек входа – LiveClasses – VirtCallSites
![Page 43: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/43.jpg)
Результаты
• Размер исполняемого файла без зависимостей: – Hello World ~800 KB – SWT Example ~1.4 MB
• При агрессивном удалении «ненужных» методов и их метаинформации
![Page 44: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/44.jpg)
JetPerfect (2001)
Не такой уж perfect: – не соответствует Java SE спецификации – труден в использовании – приложения «не всегда работают» – возникающие (у конечного
пользователя) ошибки не диагностируемы
![Page 45: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/45.jpg)
Java Runxme Slim-‐Down
![Page 46: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/46.jpg)
Java Runxme Slim-‐Down (2007)
• Глобально оптимизированный исполняемый файл – «нужные» классы приложения и Java платформы оптимизируются совместно
• Оставшиеся классы – не удаляются – остается возможность загружать их через JIT
![Page 47: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/47.jpg)
Java Runxme Slim-‐Down
• Java SE API делится на компоненты: – Kernel, XML, SQL, CORBA, AWT/Java2D, Swing, etc.
• анализатор определяет какие компоненты “нужны” – содержат достижимые методы
![Page 48: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/48.jpg)
Глобальный анализатор
Application
Java SE API
Entry points - used - not used - component’s boundary
![Page 49: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/49.jpg)
Java Runxme Slim-‐Down • Пользователю предоставляются:
– результаты анализа c возможностью исключить неиспользуемые компоненты
![Page 50: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/50.jpg)
Java Runxme Slim-‐Down
• Исключенные компоненты: – помещаются на веб-‐сервер (доступны приложению)
– загружаются VM по требованию
• Соответствует Java SE спецификации!
![Page 51: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/51.jpg)
Результаты
![Page 52: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/52.jpg)
On GUI toolkits
• Экономия в размере незначительна, если используется Java2D, AWT/Swing
• Что делать?
![Page 53: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/53.jpg)
On GUI toolkits
• Экономия в размере незначительна, если используется Java2D, AWT/Swing
• Что делать?
• Java Core + alternaxve GUI toolkit
![Page 54: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/54.jpg)
Java Core + alternaxve GUI
![Page 55: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/55.jpg)
Java Core + alternaxve GUI
Фрагментация Java
![Page 56: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/56.jpg)
Java Core + alternaxve GUI
• SWT/JFace • eSWT • Java OpenGL • JavaFX
– уже входит в платформу!
![Page 57: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/57.jpg)
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
JavaFX Packager vs. Runxme Slim-‐Down
![Page 58: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/58.jpg)
Java Runxme Slim-‐Down: уроки
• Компонентная модель JRE для уменьшения приватного Java Runxme – жизнеспособна – работает
• Проверено временем
![Page 59: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/59.jpg)
Проект Jigsaw
![Page 60: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/60.jpg)
Проект Jigsaw
• Java Module System h.p://openjdk.java.net/projects/jigsaw
• Модуляризация JRE – разбиение на компоненты – устранение лишних зависимостей – перевод на Module System
![Page 61: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/61.jpg)
Прототип Java Module System • Доступен по h.p://jdk8.java.net/jigsaw/ • module-info.java
– описывает зависимости модуля (JLS, JVM)
• .jmod -‐ бинарный формат модуля • jpkg -‐ инструмент для упаковки модуля
– использует pack200, 7z, bzip • javac, jmod – статическое управление зависимостями
• java –m ... -‐ модульный режим запуска
![Page 62: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/62.jpg)
Jigsaw: модуляризация JRE
• Планы: J Ä Java8 Ä
• Почему так долго? -‐ объективные причины
![Page 63: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/63.jpg)
Jigsaw: трудности перевода
![Page 64: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/64.jpg)
Jigsaw: трудности перевода
![Page 65: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/65.jpg)
• Многие зависимости убраны, но многие еще осталось – процесс оказался очень трудоёмкий
• Проблемы с обратной совместимостью
– getClassLoader() == null – Class.forName() и правила видимости – classloader delegaxon
Jigsaw: проблемы прототипа
![Page 66: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/66.jpg)
• Определены новые требования – обратная совместимость – «cвященная корова»
• Платформенные модули отличаются от пользовательских – нельзя подключать два платформенных модуля с одной функциональностью разных версий
– для пользовательских модулей -‐ можно
Jigsaw: текущий статус
![Page 67: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/67.jpg)
• Не будет клона Maven, Ivy, Gradle • Поддержка нативных пакетных мэнеджеров
– Java модуль можно поставить через rpm, yum, etc.
– без поддержки Mac, Windows – для Mac, Windows будет инструмент паковки в нативный инсталлятор
• AOT компиляция Java модулей – если будет найден proof of concept
Jigsaw: текущий статус
![Page 68: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/68.jpg)
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
![Page 69: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/69.jpg)
Compact Profiles: инструменты • jdeps – инструмент статического анализа зависимостей приложения
• javac –profile – предупреждает о зависимостях вне указанного профиля
• jrecreate – создает нужный компактный профиль – Есть только в Java SE Embedded!
![Page 70: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/70.jpg)
Compact Profiles: размеры • Compact1: 11MB
• Compact2: 15MB
• Compact3: 21MB
• Full JRE: 49MB Замечание: размеры на диске (ROM)
![Page 71: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/71.jpg)
JEP-‐178 (Staxcally-‐Linked JNI libraries)
• Распространение без динамических библиотек – реализация naxve-‐методов линкуется к JVM – единый исполняемый файл
• Преодоление существующих барьеров – требования Apple AppStore
![Page 72: Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения без зависимостей.](https://reader033.fdocument.pub/reader033/viewer/2022042521/557fbbfad8b42a36118b4c8a/html5/thumbnails/72.jpg)
Заключение
• Компонентная модель JRE – жизнеспособна
• Перевод JRE на модульную систему – статический импорт (без лишних зависимостей) – требует времени
• Путь Java to Mobile – модульность: Java core + JavaFX – AOT компиляция + JEP-‐178