В первой части статьи мы попробуем разобраться, кто такой этот Zulu и что нам от него ожидать.Ну а потом мы перейдём к распаковке Zulu Technology Preview и, в качестве побочного эффекта, посмотрим, чем же Oracle так нашпиговала свою JDK, что та весит в полтора раза больше Zulu.
Java: Oracle и IBM? Azul и Microsoft!
Интересные времена наступают. Точнее, уже наступили. В последние полгода Azul и Microsoft как-то сильно активизировались в плане Java, причём именно в России. Посудите сами:
- в апреле на питерской Java-конференции JPoint Azul выступила спонсором, а её VP of Engineering Аня Барски выступила с пленарным докладом, после которого активно поползли слухи о том, что Azul открывает офис в Питере.
- в конце июля Oracle и Microsoft объявляют о партнёрстве
- в июле слухи об Azul в Питере подтвеждаются
- несколько дней назад на JavaOne Azul и MS Open Tech представляют Zulu
Кто такие Azul
Вообще Azul Systems известна своими высокопроизводительными Java-решениями.
Начали они с того, что сделали свою Java на… железе. Решение называется Azul Vega. Последние версии содержат сотни вычислительных ядер и сотни гигабайт RAM.
TheShade как-то рассказывал байку времён своей работы в Intel. Мол, брали они стандартную бенчмарку, в которой Sun’овская Java давала 4000 попугаев, начинали оптимизировать свою имплементацию и после долгих трудов им удавалось выжать 5000 попугаев. «Ура!», кричали они, и публиковали статью о том, как они уделали сановскую имплементацию аж на 25%. После этого приходили парни из Azul, брали бенчмарку и получали на своей Vega не 4000 и не 5000 попугаев, а миллион. Занавес.
Потом они создали чисто софтовое решение — Zing для Linux. Судя по всему, начиная с какой-то версии Linux 2.6 API Linux стало достаточно для того, чтобы отказаться от железной части и портировать свои лучшие наработки из железной части в софт. Вышло довольно круто. Zing позиционируется как решение для тачек с большими хипами:
- масштабируемое
- low latency, GC без пауз
- и так далее
Как известно, каждая плюшка чего-то стоит. В случае low latency нам всегда приходится жертвовать всем остальнымthroughput’ом. Известный мастер elizarov рассказывал недавно за чаем, что крутых latency они добивались на стенде при загрузке процов на 5%, а уже в районе 10% latency начинал сильно проседать. Возможно, крутаны из Azul могли бы затюнить своё решение гораздо лучше, но речь сейчас вообще не об этом.
Пресс-релиз от Azul
Что же официально говорит нам Azul в своём пресс-релизе?
Во-первых, говорится про Windows Azure. Во-вторых, встречается модное нынче «community-driven». В третьих, говорится про полную совместимость со спецификацией Java SE 7. Значит, эти ребята не сильно разломали OpenJDK, что радует 🙂 Но это всё и так понятно.
Из интересного: Azul будет активно заливать в OpenJDK патчи и багфиксы. То есть, не только пользоваться чужим, но и вносить свой вклад. Это крутое заявление, но не новое. Любой нормальный лицензиат Java так делает хотя бы для того, чтобы избавиться от головной боли.
Представим себе, что у нас есть хитрый лицензиат Вася, который нашёл баг в OpenJDK, пофиксил его в своём форке, но не сказал остальным. Ту бишь, не за бэкпортил. И сидит такой довольный собой. Допустим, через месяц ту же проблему нашёл честный Петя, пофиксил её своим способом и залил в OpenJDK. В итоге при первой же синхронизации с обновлённым OpenJDK у Васи случится
батхёрткофликт в исходниках, с которым нужно будет разбираться. А это то ещё удовольствие.
Глазами Microsoft
В Редмонде тоже не дремлют. Чувак из Microsoft Open Technologies <a href="">пишет на MSDN, что фишка в том, что теперь последние версии OpenJDK 7 для Windows теперь доступна в бинарном виде благодаря Zulu, а в дальнейшем цитирует пресс-релиз Azul.
Пресса
Joab Jackson на ComputerWorld отмечает очевидное: Azul будет дефолтной платформой в Azure для тех, кому Java в Azure нужна как сервис. Кроме того, он упоминает Oracle Cloud, в котором Oracle почему-то не предоставяет Java SE как сервис, а предоставляет как сервис более высокоуровневое решение — Java EE. Типа, деплойте-ка своё JavaEE-приложение в Oracle Cloud, а дальше мы сами разберёмся, как его эффективно выполнять.
Звучит разумно с точки зрения облачной модели c одной стороны и как забивание болта на Java SE с другой. Нужна ли бизнесу Java SE без Java EE? Стоит ли ради неё заморачиваться? Судя по статье, Microsoft отвечает на этот вопрос скорее утвердительно, а Oracle скорее отрицательно. Следует лишь заметить напоследок, что это статья на ComputerWorld, а не официальный релиз Oracle или Microsoft.
www.pcworld.com/article/2049415/microsoft-sails-past-oracle-in-bringing-java-se-to-the-cloud.html
Распаковка
Итак, потрогаем Zulu Technology Preview. На официальном сайте Azul Systems лежит ссылка. Кликаем и, о чудо, перед нами 60-мегабайтный zip-архив. Судя по названию, этот билд собран на OpenJDK 7u25 и заточен под Windows x64. Для справки, Oracle JDK 7u25 под win x64 весит около 90 мегабайт, а Oracle JDK 7u40 аж целых 125 мегабайт. Запускаем:
D:\zulu1.7.0_25-7.0.0.0-win64\bin>java -version
openjdk version «1.7.0_25»
OpenJDK Runtime Environment (Zulu 7.0.0.0-win64) (build 1.7.0_25-b34)
OpenJDK 64-Bit Server VM (Zulu 7.0.0.0-win64) (build 23.25-b03, mixed mode)
хмм, ну ок. Тогда пройдёмся по внутренностям архива.
Распакованная jdk 1.7.0_25 весит 216 мегабайт, а распакованная zulu 1.7.0_25 весит 136 мегабайт. Где же собака порылась оставшиеся 80 метров?
- папка bin весит в Zulu 1.7 метров против 2.5 в Oracle JDK. Мелочь, но интересно. Заходим внутрь и видим, что названия файлов те же, только вот размеры разные. Большинсво мелких exe-шников у Oracle весит по 16 килобайт, а у Azul — по 9 мегабайт. Такое ощущение, что разница просто в компиляторе, которым эти самые екзешники делали. Ну или в настройках. java.exe и javaw.exe отличаются на 11 кило (185 у Oracle против 174 у Azul). Существенно отличается размер unpack200.exe (177К против 109К). Радует, что хотя бы майкрософтовская msvcr100.dll весит поровну в обоих дистрибутивах 🙂
- 5-мегабайтной папки db c JavaDB у Azul нету. Зато есть папки demo и sample суммарным весом как раз примерно 5 метров.
- src.zip весит примерно одинаково, по 21 мегабайту
- папка include у Oracle больше на 150К за счёт наличия врапперов вокруг вызовов AccessBridge DLL, нужной для работы Java Accessibility
- jre у Azul меньше на 50 метров: 76 против 126. Заглянем внутрь. jre/bin весит 13 метров против 36. Из крупняка там нету библиотек для упомянутого Java Accessibility (пара мегабайт), JavaFX (я насчитал 15 мегабайт). Ну и по мелочи: JdbcOdbc, JavaWebStart Acivex Control и т.п. Ещё 2 мегабайта отыскалось в jre/lib/fonts. Ещё 15 метров отыскались в jre/lib/jfxrt.jar (классы JavaFX). Ещё 4 метра — в Deploy.jar …
- Ещё 27 мегабайт в оракловой джаве занимает VisualVM — профилировщик, портированный несколько лет назад из плагина NetBeans в отдельное приложение.
На этом месте я понял, что разница с точки зрения именно файлового содержимого — в том, что Oracle JDK включает пачку собственных проприетарных технологий, поэтому весит сильно больше и сравнение не совсем корректно. В этом смысле, нужно было сравнивать сборки Oracle JDK и OpenJDK под Ubuntu — было бы проще.
Итак, как результат: под капотом у нас применение разных компиляторов под винду (или, по крайней мере, разные настройки одного компилятора) и несколько технологий от Oracle, нужных не всем и раздувающих дистрибутив. Именно для того, чтобы побороть последнюю проблему, в Java SE 8 реализованы Compact Profiles. Я понимаю, что сравнивать две софтины по набору файлов — это полный идиотизм, и нужно копать дальше и запускать всё это, меряться попугаями и т.п. Но это материал для технической статьи, а не обзорной.
Давайте её запустим!
Я взял Dcompiler.jar и…
D:\>D:\zulu1.7.0_25-7.0.0.0-win64\bin\java.exe -jar DCompiler.jar
Exception in thread «main» java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:208)
at java.awt.Window.(Window.java:535)
at java.awt.Frame.(Frame.java:420)
at java.awt.Frame.(Frame.java:385)
at javax.swing.JFrame.(JFrame.java:180)
at MainFrame.(MainFrame.java:253)
at Gui.create(Gui.java:18)
at Gui.main(Gui.java:49)Мда, она ещё и Headless. Это значит, что
эти парни выпилили из своей джавы AWT и SwingZulu предназначена только для серверов. IntelliJ IDEA вы на ней не запустите. Вот так.Заключение
Для меня по-прежнему остаётся загадкой, в чём же специфика Zulu. На ум приходит только какое-то потенциальное тесное сотрудничество Azul Systems и Microsoft в плане компиляции и оптимизации нативного кода OpenJDK под винду. Может быть, какие-нибудь навеянные совместными усилиями оптимизации в JIT. Может быть, какие-то куски из Zing, который является продуктом для Linux, будут портированы (или уже портированы) в Zulu.
Почему же Zulu позиционируется именно как решение для Windows Azure, а не просто как сборка OpenJDK под винду. Что это? Маркетинг? Ну ок. А что в Zulu технически нового? Какова специфика Zulu? Хочется верить, что это действительно выльется во что-то интересное технически и даст Java-миру что-то принципиально новое. Пока что я вижу только порт OpenJDK на Windows x64. Что я упустил? Кто из вас что знает про Zulu? Ну же?
В то же время, налицо интересное противоречие между Zing и Zulu. Zing — это продукт для одной большой тачки. А Zulu, как заявлено, продукт для облака, то есть для множества мелких тачек. Чего хочет добиться Azul? Играть на обоих рынках? Можно ли при таком противоречии портировать какие-то решения из Zing в Zulu? Или это просто порт OpenJDK, что называется, без претензий на лидерство? В общем, много интересного. Время покажет.
Ну и вообще — Java в облаке, JVM в облаке. Что это и зачем? Быстрое клонирование работающего рантайма между машинами в облаке? Возможность менять настройки хипа на лету? Автоматический форк инстансов при выполнении каких-то условий? Реализация I/O (диска и сети), оптимизированная для виртуальных машин? В общем, вопросов масса.
Порассуждать на эти и другие темы я приглашаю вас на конференции Joker 2013, которая пройдёт в Питере уже через две недели. Среди прочих, в программе конференции будет доклад от CTO Azul Systems Гила Тини про сборку мусора и доклад от Александра Белоцерковского из Microsoft как раз про Java в Windows Azure. И именно им двоим лично я и хочу задать озвученные выше вопросы.
ссылка на оригинал статьи http://habrahabr.ru/company/codefreeze/blog/195740/
Добавить комментарий