company_banner

Никита Липский и Дмитрий Чуйко об AOT в Java на jug.msk.ru

    Очередная встреча московской Java User Group прошла 22 мая 2017 года традиционно в офисе компании КРОК. На ней Никита Липский и Дмитрий Чуйко рассказали о статической (Ahead-of-Time) компиляции в языке программирования Java и её реализации в продуктах компаний Excelsior и Oracle.



    О докладчиках


    Никита Липский представляет новосибирскую компанию Excelsior, выпускающую уникальный продукт — статический компилятор для языка Java, Excelsior JET. Приложение вполне востребовано и отлично чувствует себя на рынке, этой осенью будет отмечаться уже 20 лет его существования. Никита является одним из инициаторов создания и активным участником разработки приложения.

    Блог компании достаточно интересен: кроме анонсов новых версий (с плагинами для Maven и Gradle) встречается описание и прочих полезных вещей вроде Git-плагина для Far Manager и плагина для IntelliJ IDEA (написанных программистами Excelsior). Судя по опросу, скоро можно ожидать что-то ещё.

    Доклады Никиты, упорядоченные в хронологическом порядке:


    Аудио с Никитой:


    Для ознакомления с Excelsior JET наиболее полезны первые доклады раз и два (совместное выступление Никиты с Павлом Павловым на JUG.ru в 2013 году), потом можно посмотреть истории о технической поддержке продукта.

    Прочие ссылки: Хабрахабр, GitHub, Twitter, SlideShare.

    Дмитрий Чуйко работает в компании Oracle, которая тоже с недавнего времени заинтересовалась статической компиляцией. Является активным докладчиком как конференций JUG.ru, так и прочих.

    Доклады Дмитрия:

    • «Новинки в java.util.concurrent» (JUG.ru-2013: видео)
    • «Обзор нововведений в java.util.concurrent (JSR166e)» (JEEConf 2013: презентация, видео)
    • «Java Mission Control» (Java 8 Launch 2014: видео)
    • «Быстрая загрузка ваших классов» (JUG.ru-2015: видео)
    • «CompletableFuture. Хочется взять и применить» (JUG.ru-2015: видео)
    • «CompletableFuture уже здесь» (JPoint 2015: видео)
    • «Completable Future уже здесь» (JEEConf 2015: презентация, видео)
    • «Hotspot и AOT» (JBreak 2016: видео)
    • «Hotspot и AOT: Пришло время компилировать» (JPoint 2016: презентация, видео)
    • «Чёрная метка, StampedLock и его друзья. Как не нарушить пиратский кодекс» (JPoint 2016 Student Day: видео)
    • «Hotspot & AOT» (JEEConf 2016: видео)
    • «Ahead-of-Time компиляция для HotSpot JVM» (JUG.ru-2016: презентация, видео)
    • «Compile ahead of time. It’s fine?» (GeeCON 2017, JEEConf 2017: презентация)

    Прочие слайды на SlideShare.

    О докладах


    Для обоих докладчиков встреча jug.msk.ru стала частью тура выступлений на конференциях. Тур Никиты начался участием его в записи выпуска 134 подкаста Разбор полётов (из аэропорта). Далее были Riga DevDays 2017, GeeCON 2017, jug.msk.ru и Oracle Code 2017 Moscow. Тур Дмитрия включал тоже GeeCON 2017 и jug.msk.ru, далее JEEConf 2017.

    Встреча и тема, которой была посвящена встреча (AOT), вызвали большой интерес. В качестве зрителей присутствовали, по крайней мере, пять спикеров конференций, проводимых JUG.ru. Т.е. всего (с учётом Дмитрия и Никиты) была редкая возможность увидеться и пообщаться с семерыми спикерами.

    Андрей Когунь вместе с Никитой (первый снимок) и дополнительно Дмитрием (второй снимок) начинает встречу.



    Никита выступал первым. На мой взгляд, это лучший или один из лучших его докладов. Доклад продолжался два часа, что позволило ему больше рассказать и ответить на большее количество вопросов из зала. Выступление значительно заинтересовало присутствующих. Вопросы были хорошими и подчас неожиданными для докладчика (например, про сравнение времени запуска приложений на SSD).



    С выпуском JDK 9 «из коробки» появляется возможность статической компиляции, т.е. преобразования в код целевой платформы (т.н. native). Правда, пока только под Linux. O JEP 295, JEP 243 и компиляторе Graal был рассказ Дмитрия. Доклад был логическим продолжением предыдущего его доклада, представленного ранее на встрече JUG.ru.



    Как и всегда, в перерыве и после докладов желающие имели возможность пообщаться и задать вопросы на волнующие их темы. И, естественно, попить чаю с плюшками.



    Презентации докладов встречи: AOT для Java: Мифы и Challenges Никиты и Compile ahead of time. It's fine? Дмитрия. Фотографии со встречи: группа в VK, Google+.

    К огромному сожалению, по техническими причинам не удалось записать видео (первый и, будем надеяться, последний раз за историю jug.msk.ru). Видео с предыдущих встреч доступно на YouTube.

    Подписка на рассылку анонсов следующих встреч jug.msk.ru.
    JUG Ru Group
    413,55
    Конференции для программистов и сочувствующих. 18+
    Поделиться публикацией

    Комментарии 18

      +1
      В каком году делалась презентация ?

      А то в ней JDK 6 сравнивается с GCC 4.2.3

      o_O
        0
        Да, слайд 90 можно обновить (на заметку pjBooms).
        +2
        Этот слайд, там оказался случайно, забыл выкинуть. На презентации, он не показывался
          +2
          На самом же слайды не наши замеры, а одного деятеля, которые он действительно провел довольно давно, 10 лет назад — http://www.stefankrause.net/wp/?p=6
          +4
          Спасибо большое за отчет.

          Не все мои выступления представлены в списке, но покрытие докладов почти полное.
          Из непокрытого:

          «История одной JVM в картинках» с Виталием Михеевым на JavaDay Новосибирск 2011

          «Веб 3.0. Футуристический рассказ о будущем интернета и IT», выступление на DevDay @2gis 2012 год,

          «Java худеет. Спроси меня как», JavaOne Moscow 2013

          «Java restart with WebFX», FOSDEM 2015

          Были еще JavaDay Новосибирск 2012, CodeFest 2012, 2013, 2016, TechTalks @ NSU

            0
            Дополнил список докладов указанными ссылками.

            Наиболее близкое к рассказанному Никитой (увы, на jug.msk.ru возникли проблемы с записью) — видео с JavaZone 2016 (в т.ч. с ответами на вопросы в последние 10 минут).

            Что и когда планируется по результатам проведённого опроса?
              +2
              Спасибо!

              Мы хотим в сентябре/октябре запустить технический блог. Будет несколько авторов, соответственно будет некоторое разнообразие в топиках, и надеемся, что благодаря множеству авторов он будет довольно регулярным. Блог предполагается будет на английском с его переводом на русский на хабр. Я собираюсь некоторые свои выступления переработать в текст. Начну пожалуй с верификации байткода, я его начинал именно как хабропост, но потом сделал презентацию. Рассказать нам есть о чем, но посмотрим как пойдет.
                +1
                Блог предполагается будет на английском с его переводом на русский на хабр.

                Здорово! Ждём, в том числе на Хабре.
                  +1

                  Не забудьте прикрутить к блогу RSS.

                    0
                    Присоединяюсь к просьбе.
                +1
                Ставшее доступным пару дней назад видео доклада с Riga DevDays 2017 можно посмотреть по ссылке (ссылку на видео тоже добавил в список докладов Никиты).
                +2
                Из всего вышесказанного (да и не только, напр. тут тоже Эксельсиор) неясно, какой от AOTа великий бенефит по сравнению с JITом. Тема про WLS тоже совсем не понятна, каким образом АОТ-код можно запускать под управлением СП?

                В современном мире микросервисов JVM даже с достаточно сложным кодом (напр. СП wildfly) стартует меньше чем за полсекунды. Если мы берем небольшие демонообразные приложения (т.е. на самом деле Ъ микросервисы), написанные прямыми руками, то они столько стартовали еще 10 лет назад на 1.4.

                Вообще фраза «Java programs can become so large that it takes a long time for the JIT to warm up completely», которую цитируют во всех статьях про АОТ, немного противоречит текущему тренду (да и здравому смыслу) и если убрать постулат про приложения из тысячи классов, то получается что АОТ не привносит ничего кроме деградации?
                  0
                  Думаю, pjBooms лучше всего ответит на вопросы.
                    0
                    Я тестировал — в виртуалке неразогретая Ява стартует секунд 10
                    +1
                    Можете расшифровать аббревиатуры: WLS, СП?

                    В современном мире микросервисов JVM даже с достаточно сложным кодом (напр. СП wildfly) стартует меньше чем за полсекунды.

                    Бывают довольно разные приложения, в том числе микросервисы. И если вам нужно запустить целую пачку микросервисов, то ускорение старта, скажем в два раза, может быть не лишним. То есть, если вы распилили свое приложения на микросервисы, то свою изначальную сложность из тысячей классов вы перенесли в сотни микросервисов, и издержки на старт таким образом скорее выросли, потому что для каждого микросервиса нужно поднимать отдельную JVM.

                    если убрать постулат про приложения из тысячи классов

                    Так или иначе сложность в тысячи классов остается, если у вас не HelloWorld приложение, размазаны ли эти классы по микросервисам или нет. К тому же даже HelloWorld SpringBoot приложение уже состоит из десятков тысяч классов + десятки тысяч классов самой платформы. Понятно не все эти классы грузятся на старте, но чем больше функционала нужно, в том числе микросервису, тем больше этих классов может потребоваться.

                      0
                      Можете расшифровать аббревиатуры: WLS, СП?

                      Предполагаю, WebLogic Server и сервер приложений (application server).
                        +1
                        Ok, тогда ответ следующий:

                        Тема про WLS тоже совсем не понятна, каким образом АОТ-код можно запускать под управлением СП

                        Если имеется в виду HotSpot AOT, то на данный момент возможно запускать только AOT-код платформы. В общем же случае, для конкретного сервера приложений можно запилить специальную AOT поддержку: как он грузит классы внутри себя тоже информация известная до исполнения. Я про это собственно и рассказываю в своей презентации. Когда сервера приложений модулиризируют и код будет грузится согласно зависимостям в модулях (ссылки между классами будут разрешаться согласно зависимостям), то для таких приложений возможен AOT и в общем случае.

                        +1
                        К тому же warmup — это не только время, которое печатается в строчке «Server startup in»: туда не входит время поднятие самой JVM, что для непрогретой JVM может быть существенным и не входит время, которое потребуется, чтобы ваше приложения начало работать в полную силу: для этого надо возможно еще пособирать профиль, покомпилировать. В конце концов JIT'у не всегда хватает ресурсов, чтобы даже горячий код оптимизировать максимально эффективно. Плюс те оптимизации, что он применяет, часто спекулятивны и при небольших изменениях в окружающей среде система неожиданно может уйти в интерпретатор со всеми вытекающими.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое