Два доклада с Joker 2021



1️⃣ Алексей Нестеров, Олег Докука — Что нового в Spring Framework 6 (1:10:58)



Оба спикера никак не связаны со спрингом, просто обсуждают слухи о нововведениях.



Spring 6 использует java 17 и не будет работать на версиях ниже.

Дата выхода - октябрь 2022.

Кодовая база Spring 6 использует модули (фича java 9). Можно скомпилировать только нужные модули, и итоговый проект займёт меньше места.



Spring Native переедет в Spring Boot 3.

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



Поменяются имена некоторых модулей. Например, пакет javax.* станет jakarta.*

В Spring WebFlux добавится поддержка HTTPClient из JDK 11.



Что удалится: Hessian, Http Invoker, JMS Invoker, JAX-WS, SecurityManager.



Что удалится, но менее вероятно: поддержка Joda Time, RxJava 1/2, FactoryBean, Autowired через сеттеры, конфигурация через XML.



Зачем смотреть: незачем. Информация недостоверная, много догадок, мало деталей.



2️⃣ Иван Крылов — От 11 к 17 версии Java (55:07)



Это доклад НЕ про новые фичи языка. Про sealed классы, records и switch спикер отсылает на доклад Тагира Валеева Java 17 для тех, кто в танке.



Два подхода к обновлению версии java в проекте:



1) Каждые полгода переходить на новую версию



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



Плюс — всегда новая и поддерживаемая версия java

Минус — раз в полгода тратить несколько спринтов на переход



2) Переходить только на LTS версию



Встречается в проектах с редкими релизами — реже, чем раз в полгода.

Минус — переход всегда долгий и трудный, оттягивается до последнего.



Переезд на java 17 — это необходимость. Дело не в новых фичах, а в том, что поддержка старых версий ограничена и периодически прекращается. Миграция с 8 до 17 сложная, с 11 до 17 попроще.



С чем могут быть проблемы при переходе



▫️ Удалены финалайзеры из FileOutputStream, FileInputStream, zip.Deflater, zip.Inflater, zip.ZipFile, color.ICC_Profile. Это связано с предстоящим удалением финалайзеров в java 18.

▫️ Удалён конструктор URLDecoder.

▫️ Многие классы в AWT и Swing поменяли видимость.

▫️ Удалён Applet API.



Изменения виртуальной машины



▪️ GraalVM больше не связан с OpenJDK. Причина — административные проблемы и сложности с версионированием относительно OpenJDK.

▪️ Удалена оптимизация biased locking из-за плохой совместимости с Project Loom.

▪️ Добавлены CDS архивы для уменьшения времени старта VM.

▪️ Гибкий metaspace.



Изменения в сборщиках мусора



▫️ Удалён CMS.

▫️ ZGC готов к использованию в продакшене с 15 версии, в ранних версиях очень много багов.

▫️ G1 и Shenandoah возвращают неиспользуемую память ОС. Это уменьшает потребляемую память сервиса, и сервисы в облачной среде обойдутся дешевле.



Изменения в JDK



▪️ Классы по работе с TCP и UDP работают быстрее — DatagramSocketAPI, SocketAPI.

▪️ NullPointerException показывают больше информации.

▪️ Новый генератор случайных чисел.



Изменения Security



▫️ Добавлены Root сертификаты с разным сроком действия

▫️ Удалён SecurityManager

▫️ Удалены модули java.security, java.rmi.activation



Платформы



▪️ Добавилась поддержка Linux Alpine. ОС полезна для маленьких контейнеров в облаках. В ОС меньше команд, поэтому она более безопасна. Если маленькие контейнеры не нужны, то лучше выбрать другую ОС.

▪️ Полная поддержка ARM: унифицированный Linux порт, Windows, macOS



Какие проекты не успели войти в java 17



▫️ Loom: легковесные потоки в JVM

▫️ Panama: работа с нативным кодом, альтернатива JNI

▫️ Valhalla: новые типы данных value types — функциональные как классы и компактные как примитивы



Зачем смотреть: незачем. Большую часть видео перечисляются неязыковые фичи между 11 и 17 версией. О них говорят редко, так что для кого-то информация окажется новой. Но с тем же успехом можно посмотреть полный список фич и поискать слова, которые актуальны для вашего проекта или интересны лично вам.