Всем привет! ? ? ? ? Мы 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 23JIT-компилятор 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-секция;

Backend-секция.

Или в плейлисте VK Видео.

Спасибо, что читаете нас! Ждем обратную связь в комментариях. Увидимся через месяц ?

Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!

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


  1. csl
    07.10.2024 13:31

    Derived record creation (preview)

    UPD: А, раньше было targeted для этого релиза 23, но не включили