Статьи

JVMLS 2016: обзор саммита языка виртуальных машин Java

На прошлой неделе состоялся Саммит по языку виртуальных машин Java , на котором дизайнеры языков и инженеры JVM каждый год собираются вместе, чтобы представить новейшие разработки и обсудить будущее виртуальной машины. Для нас, Java-разработчиков, это может показаться одним шагом вперед, ведь JVM — это просто механизм, выполняющий наш код. И само событие полностью омрачено предстоящим JavaOne .

Но не заблуждайтесь, JVM давно вышла из тени Java и ведет собственную жизнь. Просто рассмотрите все инновационные языки, которые работают на JVM и вызвали улучшения в Java (кашель, лямбда-выражения, кашель). И не забывайте, как ограничения и возможности JVM продолжают влиять на эволюцию языка. Невозможно не только получить более глубокое понимание Java при игнорировании JVM, но также и рассмотреть будущее Java без учета JVM.

Поэтому, чтобы понять, куда движется Java, важно посмотреть, куда движется JVM. И JVMLS позволяет нам делать это! Были разговоры на множество интересных тем, но я хочу сосредоточиться на трех.

Проект Пазл

Project Jigsaw является флагманской функцией Java 9 и привнесет модульность в язык . Это позволит разработчикам создавать модули и обещает надежную конфигурацию и надежную инкапсуляцию, а также улучшенную масштабируемость, безопасность и производительность.

В Java 9 мы сможем создавать модули, где модуль — это просто JAR, содержащий новую конструкцию — дескриптор модуля . Он описывает модуль, давая ему имя, перечисляя другие требуемые модули и экспортируемые пакеты. Во время выполнения модули могут (в основном) видеть только те модули, которые им требуются (это называется удобочитаемостью ), и могут обращаться к типам в других модулях, только если они читают этот модуль и этот модуль экспортирует пакет, содержащий тип (называемый доступностью ).

Это означает, что компилятор и JVM наконец-то отказались от большого шарика грязи, в который они использовали весь наш код и наши зависимости. Вместо этого мы получим реальный график, который близко отражает наше восприятие структуры нашего программного обеспечения. И компилятор, и JVM поймут этот график! Они будут замечать, когда чего-то не хватает, когда есть две версии одного и того же модуля, когда два модуля экспортируют одни и те же пакеты и т. Д. И они потерпят неудачу во время компиляции или запуска вместо того, чтобы выдавать ошибки во время выполнения или, что еще хуже, ведут себя неуверенно.

Чтобы получить более глубокое понимание, посмотрите выступление Алекса Бакли «Головоломка — Под капотом» или посмотрите ресурсы Jigsaw в моем блоге , возможно, начните с этого пошагового руководства, чтобы испачкать руки. Другие связанные с Jigsaw презентации — это «Оптимизация JLink-Time» Клеса Редестада и, особенно интересная для тех, кто работает с Nashorn , «Модульность Nashorn» Майкла Хаупта.

Проект Вальхалла

Проект Valhalla направлен на представление типов значений, которые можно обобщить как самоопределенные примитивы.

Как и примитивы, типы значений не несут ни накладных расходов памяти, ни косвенного обращения. Самоопределенная point с двумя целевыми полями x и y будет встроена везде, где она используется. Для этого потребуется только память, необходимая для этих двух целых чисел, а массив точек по существу будет массивом пар х / у. Как и примитивы, такие точки не имеют идентичности — хотя могут быть два разных объекта Integer со значением 5, не может быть двух разных целых чисел 5.

Как и классы, типы значений могут иметь методы и поля и реализовывать интерфейсы. Таким образом, слоган: «Коды, как класс, работает как int». Это позволит нам больше не взвешивать абстракцию, которую мы бы предпочли, против производительности (мы представляем), в которой мы нуждаемся.

Но проект быстро отвлекся. Как вы знаете, дженерики не работают для примитивов — не может быть ArrayList<int> . Это уже болезненно с восемью примитивами (см. Примитивные специализации Stream или библиотек вроде Trove ), но становится невыносимым, когда разработчики могут определить больше. Если бы типы значений должны были быть помещены в коробку для взаимодействия с обобщениями (как примитивы сегодня), их использование было бы довольно ограниченным, и они не были бы начальными.

Поэтому мы хотим иметь возможность использовать дженерики с типами значений — и примитивы могут прийти вместе. В конце мы не только хотим создать экземпляр ArrayList<int> или ArrayList<point> , мы также хотим, чтобы он был поддержан int[] или point[] соответственно. Это называется специализация и открывает новую банку червей.

Чтобы посмотреть на этих червей, посмотрите выступление Брайана Гетца «Приключения в параметрическом полиморфизме» . Если вы хотите пойти глубже, посмотрите прошлогодние доклады — желательно сначала — и последуйте за Маурицио Чимаморе «Отражение Вальхаллы — одно зеркало, чтобы править всем» и, возможно, даже за Реми Форакс «Бэкпорт Вальхаллы»

Если нам повезет, то все или даже все это закончится в Java 10.

машина

Фьючерсы на виртуальные машины

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

  • единая модель объектов, значений, массивов, методов и т. д.
  • продолжение работы над производительностью, например, в отношении эффективности памяти за счет увеличения плотности и совместного использования, а также с дальнейшей оптимизацией горячих путей
  • гранулярный параллелизм с волокнами, превосходящими нити, в качестве основной абстракции
  • становится все более полезным, совместимым и совместимым — для языков, работающих поверх него, а также для нативных, тем самым устраняя разрыв между ними
  • Реализация стека, где стек содержит классы и методы как истинные объекты, а не только как строки, и где виден полный контекст каждого фрейма (локальные, мониторы и т. д.), и стек может редактироваться запущенной программой

Честно говоря, многое из того, что видит Джон Роуз, лежит у меня над головой. Но в любом случае здорово слушать его, хотя бы для того, чтобы впитать его энтузиазм. Вам не нужно верить мне на слово, просто посмотрите «VM Futures» и убедитесь сами!

Во многом в духе взгляда Роуза находится Project Panama , о котором Микель Видстедт и Тоби Аджила говорят в «Going Native» , и к которому Ян Грейвс добавляет «Vector API For Java» . Также нацелена на устранение разлома презентация Кристиана Виммера об «Едином компиляторе»

Резюме

JVM — это мощный зверь, и многие интеллигентные люди прилагают все усилия, чтобы сделать его еще лучше, сохраняя при этом сложности. Они делают хорошую работу, что вы думаете?

И если все это слишком далеко от вашей повседневной работы, вернитесь через месяц, когда мы расскажем о JavaOne 2016!