Черговий 21 випуск Java став офіційно доступним з моменту його загальнодоступного запуску 19 вересня 2023 року. Поточний реліз являє собою 12-й випуск оновленої платформи Java за новим підходом випусків релізів, який базується на піврічному циклі (очікуємо появи Java 22 у березні 2024 року.)
Кафедра Комп’ютерних наук відслідковує всі новини, що пов’язані зі змінами то оновленнями платформи Java. Розглянемо їх більш детально.
Як описано в офіційній публікації в блозі випуску, Java 21 надає десятки нових можливостей і вдосконалень. П’ятнадцять із них з’явилися як JEP (пропозиції щодо покращення JDK, т.з. JEP), які включали вісім вже готових до використання нових функцій. Інші – це т.з. функції попереднього перегляду та інкубатора, які призначені для вивчення вами та вашою організацією, але які ще не готові для використання у виробництві, оскільки ці функції можуть змінитися в майбутніх випусках Java.
Значна частина нових функцій у Java 21 стосується чотирьох основних платформних ініціатив: Project Amber (підвищення продуктивності розробника), Project Loom (переосмислення потоків), Project Panama (з’єднання Java та інших платформ) і Project Valhalla (розширення об’єктної моделі Java за допомогою ціннісних об'єктів).
Інші JEP покращують роботу основних бібліотек Java та збирачі сміття, а деякі готують застарілі функції Java для видалення в майбутніх випусках платформи.
Розглянемо нові покращення 21 платформи Java , які можна використовувати у продакшені (Production-ready JEPs)
JEP 431: Послідовні колекції. Цей JEP представляє нові інтерфейси для представлення колекцій із визначеним порядком. Кожна така колекція має чітко визначений перший елемент, другий елемент і так далі, аж до останнього елемента. Вони також надають уніфікований API для доступу до першого й останнього елементів колекції, а також для обробки її елементів у зворотному порядку.
JEP 439: Generation ZGC. Цей JEP покращує продуктивність програми, розширюючи Z Garbage Collector (Z-збірник сміття, ZGC) для обслуговування окремих генерацій молодих та старих об’єктів. Програми, що працюють із Generation ZGC, повинні мати менший ризик зупинки розподілу, менші накладні витрати пам’яті кучі та накладні витрати CPU на прибирання сміття.
JEP 440: Шаблони запису. Цей JEP удосконалює мову програмування Java, розширюючи роботу механізму співставлення шаблонів (pattern matching) до екземплярів класів записів, уможливлюючи більш складні запити даних. Він також додає вкладені шаблони, які можуть допомогти вам створювати зручніші запити даних.
JEP 441: Співставлення шаблону для switch. Цей JEP покращує продуктивність мови програмування Java, роблячи її більш семантичною, тому складні запити, орієнтовані на дані, можна виражати коротко та безпечно. Це робиться шляхом розміщення шаблонів в мітках біля case, а також вимогою, щоб конструкція swicth з шаблонами охоплювали всі можливі вхідні значення.
JEP 444: Віртуальні потоки. Віртуальні потоки можуть значно скоротити зусилля, пов’язані з написанням, підтримкою та спостереженням за високопродуктивними паралельними програмами. Цей JEP дозволяє серверним програмам, написаним у стилі «один потік на один запит» ( thread-per-request style) масштабуватися з майже оптимальним використанням апаратного забезпечення, а також дозволяє існуючому коду, який використовує API java.lang.Thread адоптуватись до віртуальних потоків з мінімальними змінами.
JEP 449: Підготовка до вилучення 32-розрядний порт для Windows x86. 32-розрядна версія Windows на процесорах x86 застаріла. Вона підтримується в Java 21, але в майбутньому підтримка буде припинена. Цей JEP оновлює систему збірки з метою, щоб видавати повідомлення про помилку під час спроби налаштувати збірку для Windows 32-bit x86 (x86-32). Повідомлення про помилку можна буде придушити за допомогою нової опції конфігурації, але мета полягає в тому, щоб спонукати вас перейти з застарілої платформи Windows 32-bit x86 на нову.
JEP 451: Підготовка до заборони динамічного завантаження агентів. Цей JEP готує вас до майбутнього випуску JDK, який за замовчуванням забороняє завантаження агентів у працюючу JVM. JVM робить це шляхом видачі попереджень, коли агенти динамічно завантажуються у запущену JVM. Слід зауважити, що засоби обслуговування, які завантажують агентів під час запуску, не викличуть попереджень у жодному випуску. Цей JEP поєднує можливість динамічного завантаження агентів з іншими так званими «надпотужними» можливостями, такими як глибоке відображення (deep reflection).
JEP 452: API механізму інкапсуляції ключів. Механізми інкапсуляції ключів (KEM) забезпечують сучасні криптографічні методи, які захищають симетричні ключі за допомогою криптографії з асиметричним або відкритим ключем. Цей API дозволяє використовувати кілька алгоритмів KEM, а також дозволяє постачальникам послуг безпеки реалізовувати алгоритми KEM у коді Java або у нативному коду.
В цій публікації ми розглянули тільки ті JEP-и, які вже повноцінно готові до використання. В наступній публікації ми розглянемо JEP-и, які знаходяться на етапі тестування та рекомендовані для ознайомлення користувачам платформи Java.
Статтю підготував проф. каф. комп'ютерних наук Олег Ільїн.
За матеріалами https://blogs.oracle.com/javamagazine.