Всем привет! ? ? ? ? Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске детально рассмотрим новый релиз Java 23 и расскажем, какие JEPы в него вошли. Посмотрим несколько интересных докладов с JVM Language Summit, узнаем об опыте Netflix по переходу на Generation ZGC и почитаем интересную статью о низкоуровневых инструментах обеспечения гарантий порядка памяти.
Главные новости о Java 23
В новый релиз вошли следующие JEPы:
467: Markdown Documentation Comments — теперь в JavaDoc можно использовать Markdown вместо HTML. Ура! ?
455: Primitive Types in Patterns, instanceof, and switch (Preview) — добавили поддержку примитивных типов в паттерн-матчинге.
476: Module Import Declarations (Preview) — можно указывать в секции import целые модули, что будет эквивалентно импорту всех классов из всех пакетов модуля.
466: Class-File API (Second Preview) — внутреннее API для class-файлов. Внесено несколько технических изменений.
473: Stream Gatherers (Second Preview) — эквивалент Collector для нетерминальных операций. Изменений в сравнении с предыдущей версией нет.
477: Implicitly Declared Classes and Instance Main Methods (Third Preview)— упростили написание Hello World! ? Добавили еще больше автоматических импортов.
480: Structured Concurrency (Third Preview) — привнесение парадигмы Structured Concurrency. Изменений в сравнении с предыдущей версией нет.
481: Scoped Values (Third Preview) — более строгая альтернатива ThreadLocal. Теперь метод ScopedValue.callWhere параметризуется исключением для поддержки проверяемых исключений, а метод ScopedValue.getWhere был удален за ненадобностью.
482: Flexible Constructor Bodies (Second Preview) — возможность поместить код в тело конструктора перед вызовом super(..) и this(..). Добавили возможность инициализировать поля.
471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal — задепрекейчены методы для доступа к памяти sun.misc.Unsafe. Для доступа к памяти в куче рекомендуется использовать VarHandle, а вне кучи — Foreign Function & Memory API.
474: ZGC: Generational Mode by Default — режим ZGC с поколениями теперь включается по умолчанию. При этом режим без поколений deprecated.
469: Vector API (Eighth Incubator) — ну вы поняли ?
Рекомендуем ознакомиться со статьей в блоге Oracle и подробной статьей на Хабре об изменениях в Java 23:
Новости мира Java
Java 23 and IntelliJ IDEA — обзор поддержки новых языковых фич Java 23 в IntelliJ IDEA. Рассматриваются примитивные типы в паттерн-матчинге, Markdown в JavaDoc, импорт модулей, неявно объявленные классы и гибкие тела конструкторов. Полезно с точки зрения того, что приводятся очень наглядные и практические примеры использования каждого JEPа.
JDK 23 Security Enhancements — в JDK 23 добавлены улучшения безопасности, сгруппированные в категории crypto, PKI и так далее. Основные изменения включают новые потоки, временные метки, отладку, производительность криптографии и хранилище ключей для корневых сертификатов в macOS.
JDK 24 — за последний месяц вышли 14, 15 и 16-я EA-сборки JDK 24. Есть список низкоуровневых изменений — для самых больших энтузиастов.
Project Loom EA builds with changes for JDK 24 — обновлены EA-сборки Project Loom. Они содержат исправления, связанные с закреплением мониторов, изменения коснулись Scoped Values и Structured Concurrency.
Including the Graal JIT in Oracle JDK 23 — JIT-компилятор Graal теперь включен в Oracle JDK 23, но пока в качестве экспериментальной функции.
Micronaut GraalPy — Micronaut Foundation представила новый модуль, Micronaut GraalPy. Он предоставляет возможность при помощи аннотаций получать доступ к Python-модулям в качестве Java-бинов. Также стоит отметить, что этот модуль входит в проект Micronaut Graal Languages, цель которого — интеграция динамических языков, основанных на Graal, в Micronaut.
Java Visual Studio Code Extension Update — Oracle выпустила расширение Java Visual Studio Code 22.1.2 для Visual Studio Marketplace. Расширение поддерживает сборки OpenJDK 23 и предлагает улучшения для разработки. Ключевые изменения включают исправления ошибок и улучшение работы панели запуска конфигурации.
Spring News Roundup: Milestones for Spring Boot, Auth Server, Integration, Modulith, Batch — в экосистеме Spring наблюдался всплеск активности с выпуском важных обновлений. Spring Boot 3.4.0 содержит исправления ошибок, улучшения документации и новые функции. Spring Cloud Dataflow 2.11.5 — обновления зависимостей и решения проблем. Spring Security 6.4.0 — исправления ошибок, обновления зависимостей и новые функции. Spring Authorization Server 1.4.0 — обновления зависимостей и новые функции.
Интересные видео
Amplicode – конвейер для Spring-приложений прямо в IntelliJ IDEA (полная запись трансляции + Q&A)
Этот митап — большая презентация возможностей Amplicode. А возможности действительно солидны. На примере разработки приложения для пет-клиники демонстрируется работа с Docker Compose, JPA, построение REST API, настройка Spring Security и Keycloak, а также написание админки на React.
Митап нарезали на смысловые видео и положили в отдельный плейлист.
What’s New in Java 23 in 2 Minutes... More or Less - Sip of Java Обзор Java 23 за 5 минут. Да! Нас обманули в названии.
20 Years of JRuby - Where We've Been and Where We're Going #JVMLS JRuby — это Ruby на JVM, совместимый с Ruby. Цель — сохранить совместимость и удобство разработки для Ruby-разработчиков. JRuby масштабирует Ruby-приложения лучше, чем стандартная реализация C, и использует меньше памяти для приложений Rails. JRuby полезен для больших приложений Ruby и для переноса существующих библиотек в JVM. Если вы тоже любите эксперименты с JVM, то видео вам однозначно понравится.
Java - Integrity by Default #JVMLS Платформа Java развивается в сторону улучшения производительности, переносимости и безопасности, стремясь к тому, чтобы ее собственные абстракции, а также абстракции, создаваемые разработчиками, были более надежными, а их инварианты могли быть обеспечены на локальном уровне. Библиотеки могут нарушать инварианты, но только если это специально разрешено самим приложением. В докладе рассмотрели, почему и каким образом внедряется концепция «Целостность по умолчанию».
Project Lilliput - Beyond Compact Headers #JVMLS Доклад о Project Liliput, который вы можете знать по JEP 450: Compact Object Headers. Интересно о том, как удалось достичь снижения размера заголовков объектов и каковы дальнейшие планы проекта.
Полезные статьи
The Reflection API — Reflection API используется для проверки и изменения поведения приложений на виртуальной машине Java. Рефлексия — мощный метод, позволяющий выполнять операции, которые иначе были бы невозможны. Это прекрасный туториал, в котором разбираются все основные концепции и в конце пишется собственный DI Framework.
Server-Side Rendering with Spring Boot — небольшая вводная статья про рендеринг HTML на стороне backend-сервера. Автор рассказал про WebJars и зачем они нужны, а также про библиотеку для рендеринга HTML на стороне сервера Thymeleaf.
Embeddable Inheritance with JPA and Hibernate — Vlad Mihalcea рассказывает о наследовании Embeddable-сущностей в Hibernate, появившемся начиная с версии 6.6.
Подчини паузы своей воле с Generational ZGC — в Java 21 Netflix сделал переход на использование сборщика мусора Generation ZGC. Подробная статья о том, какие преимущества принес этот переход для Netflix и каким типам приложений GZGC может не подойти.
Keyset Pagination with Spring Data WindowIterator — небольшая заметка о том, как реализовывать keyset-пагинацию в Spring Data при помощи WindowIterator.
Memory Fences и volatile в Java: низкоуровневые гарантии порядка памяти — хорошая статья о механизмах, позволяющих контролировать порядок выполнения операций с памятью в многопоточных приложениях. Рассматриваются типы Memory Fences и механизмы их обеспечения: ключевое слово volatile, атомики, класс sun.misc.Unsafe (да, тот самый, методы которого депрекейтят в JEP 471) и VarHandle. Для каждого механизма приведено краткое и понятное описание и рассмотрены конкретные практические примеры использования.
Любопытные подкасты
Podlodka 390 — Устройство JVM — Никита Липский, инициатор проекта Excelsior JET (JVM с AOT-компилятором), обзорно рассказывает об устройстве JVM и специфике ее различных реализаций. Вы узнаете, как HotSpot всех победил (не без участия, кстати, самого Никиты и одного рослого индейца), как Microsoft обиделись на Sun и сделали C# вместо своей JVM, почему на самом деле приложения на GraalVM стартуют быстрее, чем так важен проект Leyden и еще много интересного. Как сказала Катя Петрова, хватит на целый сериал для Netflix ?
JVM Day
31 августа прошла наша конференция для Java- и Scala-разработчиков. Записи докладов по секциям уже доступны в плейлистах на нашем ютуб-канале:
— Java-секция;
— Scala-секция;
Спасибо, что читаете нас! Ждем обратную связь в комментариях. Увидимся через месяц ?
Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!
csl
Derived record creation (preview)
UPD: А, раньше было targeted для этого релиза 23, но не включили