Очередная встреча московской 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.
Поделиться с друзьями
-->

Комментарии (17)


  1. Siemargl
    30.05.2017 23:01
    +1

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

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

    o_O


    1. dbelob
      30.05.2017 23:34

      Да, слайд 90 можно обновить (на заметку pjBooms).


  1. pjBooms
    31.05.2017 08:58
    +2

    Этот слайд, там оказался случайно, забыл выкинуть. На презентации, он не показывался


    1. pjBooms
      31.05.2017 09:28
      +2

      На самом же слайды не наши замеры, а одного деятеля, которые он действительно провел довольно давно, 10 лет назад — http://www.stefankrause.net/wp/?p=6


  1. pjBooms
    31.05.2017 09:23
    +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


    1. dbelob
      31.05.2017 11:24

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

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

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


      1. pjBooms
        31.05.2017 12:50
        +2

        Спасибо!

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


        1. dbelob
          31.05.2017 13:07
          +1

          Блог предполагается будет на английском с его переводом на русский на хабр.

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


        1. Maccimo
          31.05.2017 23:23
          +1

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


          1. dbelob
            31.05.2017 23:36

            Присоединяюсь к просьбе.


  1. zam0th
    01.06.2017 14:06
    +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», которую цитируют во всех статьях про АОТ, немного противоречит текущему тренду (да и здравому смыслу) и если убрать постулат про приложения из тысячи классов, то получается что АОТ не привносит ничего кроме деградации?


    1. dbelob
      01.06.2017 14:10

      Думаю, pjBooms лучше всего ответит на вопросы.


    1. Siemargl
      01.06.2017 14:47

      Я тестировал — в виртуалке неразогретая Ява стартует секунд 10


  1. pjBooms
    01.06.2017 14:45
    +1

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

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

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

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

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


    1. dbelob
      01.06.2017 15:13

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

      Предполагаю, WebLogic Server и сервер приложений (application server).


      1. pjBooms
        01.06.2017 15:32
        +1

        Ok, тогда ответ следующий:

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

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


    1. pjBooms
      01.06.2017 15:42
      +1

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