Чего ждать от Java ближайшие 10 лет?



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



⭐️ Project Loom



Цель: добавить легковесные(виртуальные) потоки



Самая заметная фича со времён Stream API. Большинство проектов получат огромный буст от внедрения виртуальных потоков. Что важно — с минимальными изменениями в коде.



В Java 21 вышло базовое апи по работе с виртуальными потоками. Предстоит ещё много работы внутри JVM и в рамках языка, чтобы удобно управлять тысячами задач.



⭐️ ZGC / Shenandoah




Цель: сборщик мусора с минимальными паузами



Сборщики чуть отличаются по реализации, но задача одна — обеспечить минимум простоя во время сборки мусора. Разумеется, не бесплатно. Паузы уменьшаются, но увеличивается расход памяти и снижается пропускная способность.



Для большинства проектов это не актуально. Сборщик по умолчанию G1 отлично работает и становится лучше с каждым релизом.



⭐️ Project Panama



Цель: упростить работу с native кодом и памятью за пределами JVM



Проект делится на 2 направления:



🔹 Новый вариант JNI



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



🔹 Работа с памятью за пределами JVM



Нужна проектам, которые хотят управлять памятью без посредничества Java. Самим делать сборку мусора, сжимать и раскладывать данные по определённым структурам.



⭐️ Project Amber



Цель: упростить язык, добавить новые конструкции



Самые "народные" фичи, которые часто попадают в обзоры и статьи: var, текстовые блоки, records, pattern matching, sealed классы, string templates и так далее.



Что-то получается хорошо, что-то не очень. Где-то много пафосных разговоров про data-oriented programming. Есть странные фичи, вроде упрощения написания Hello world.



⭐️ Project Leyden



Цель: ускорить время старта Java программ



Оптимизировать загрузку классов, линковку, перенести часть процессов на этап компиляции. На энтерпрайз повлияет мало, по сравнению с работой фреймворков ускорения на уровне JVM будут мало заметны.



⭐️ Project Valhalla



Цель: оптимизировать работу с данными



Здесь так же два направления:



🔹 Создать value types — объект с полями и методами, работа с которым идёт как с примитивом:

Передаётся по значению

Компактно лежит в памяти

Не может быть null



🔹 Создать общую схему работы с примитивами, объектами и value types, избавить разработчика от мыслей про boxing/unboxing



А когда будет готово?



Плохая новость — реализации всех проектов растягиваются на десятки лет.



10 лет — не преувеличение. Лямбда-выражения в java обсуждались с 2004 года, а увидели свет только в 2014.



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



На java пишут большие системы, которые работают десятки лет. Поэтому основательный подход абсолютно оправдан😌