Від Java 17 до Java 21: Які покращення?

pic

java 17 до java 21

Java знову підняла планку з новим випуском довгострокової підтримки (LTS). Від покращеного патерн-матчингу та можливостей записів до революційних віртуальних потоків і підвищення продуктивності, Java 21 будується на міцній основі Java 17. З моєї особистої точки зору, цей пост детально розглядає основні досягнення, показуючи, як вони надають розробникам кращі інструменти, швидшу продуктивність і більшу гнучкість.

1. Мовні можливості

1.1 Покращення патерн-матчингу

Java 17 ввела патерн-матчинг для switch (як попередню можливість), спрощуючи перевірку типу та витягування даних. Java 21 робить цю можливість загальнодоступною, додаючи більшу гнучкість і виразність.

Приклад Java 17 (попередній вигляд):

public class PatternMatchingExample {  
 public static void main(String[] args) {  
 Object obj = 42;  
 String result = switch (obj) {  
 case Integer i -> "Integer: " + i;  
 case String s -> "String: " + s;  
 default -> "Unknown type";  
 };  
 System.out.println(result);  
 }  
}

Покращення в Java 21:

public class EnhancedPatternMatching {  
 public static void main(String[] args) {  
 Object obj = "Hello, Java!";  
 String result = switch (obj) {  
 case Integer i when i > 10 -> "Large Integer: " + i;  
 case String s when s.startsWith("Hello") -> "Greeting: " + s;  
 default -> "Unknown type";  
 };  
 System.out.println(result);  
 }  
}

Умова when додає більшу специфічність до умов case, що дозволяє створювати більш стиснений і виразний код.

1.2 Покращення записів

Java 21 розширює корисність записів, можливість яких була введена в Java 14, підтримуючи патерни записів в покращених циклах for та розкладання в операціях switch.

Приклад:

public record Point(int x, int y) {}  

public class RecordPatternExample {  
 public static void main(String[] args) {  
 Point[] points = {new Point(1, 2), new Point(3, 4)};  

 for (Point(int x, int y) : points) {  
 System.out.printf("Point coordinates: x=%d, y=%d%n", x, y);  
 }  
 }  
}

2. Покращення продуктивності

Java 21 вводить покращення продуктивності у всіх напрямках, з поліпшеннями в Garbage Collector (GC), JIT компіляторі та оптимізаціях часу виконання. Серед основних досягнень:

2.1 Покращення G1 і ZGC

Обидва збирачі сміття — G1 та Z — були оптимізовані для кращої пропускної здатності та зменшення затримок. Java 21 також вводить Генераційний ZGC, який покращує збір сміття для великих куп.

2.2 Віртуальні потоки (Project Loom)

Віртуальні потоки, вперше анонсовані в Java 19, готові до використання в Java 21. Вони революціонізують паралелізм, відокремлюючи кількість потоків від кількості ядер процесора.

Приклад:

import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  

public class VirtualThreadsExample {  
 public static void main(String[] args) throws InterruptedException {  
 try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {  
 for (int i = 0; i < 10; i++) {  
 int taskId = i;  
 executor.submit(() -> {  
 System.out.printf("Task %d running on thread %s%n", taskId, Thread.currentThread());  
 });  
 }  
 }  
 }  
}

Віртуальні потоки дозволяють легкий паралелізм з мінімальними накладними витратами, що робить масштабування додатків простішим.

3. Покращення бібліотек

3.1 Послідовні колекції

Java 21 вводить нову родину колекцій — SequencedCollection, яка забезпечує передбачуваний порядок ітерацій.
Це спрощує роботу з такими структурами даних, як списки (lists), множини (sets) та карти (maps).

Приклад:

import java.util.SequencedMap;  
import java.util.LinkedHashMap;  

public class SequencedCollectionsExample {  
 public static void main(String[] args) {  
 SequencedMap map = new LinkedHashMap<>();  
 map.put("One", 1);  
 map.put("Two", 2);  
 map.put("Three", 3);  

 System.out.println("First entry: " + map.firstEntry());  
 System.out.println("Last entry: " + map.lastEntry());  
 }  
}

4. Безпека та стабільність

Java 21 зміцнює безпеку з покращеними алгоритмами та протоколами, включаючи покращену підтримку TLS та криптографічних можливостей. Покращення стабільності забезпечують менше аварійних завершень роботи та кращу загальну надійність.

5. Попередні функції для майбутнього

Java 21 також вводить захоплюючі попередні функції, такі як:

  • Шаблони рядків (String Templates): більш безпечний та стислий спосіб вбудовувати вирази в рядки.
  • Обмежені значення (Scoped Values): для кращого управління локальними даними потоків.

Ось приклад шаблонів рядків:

System.out.println(STR."Hello, {name}! Your score is {score}."(name -> "Alice", score -> 95));

Висновок

Від Java 17 до Java 21 покращення є значними, охоплюючи мовні можливості, продуктивність, бібліотеки та безпеку. Java 21 надає розробникам більше інструментів для написання виразного, ефективного та підтримуваного коду, при цьому зберігаючи головну рису платформи — зворотну сумісність.

Якщо ви ще не зробили цей крок, Java 21 варта оновлення, особливо оскільки це випуск з довгостроковою підтримкою (LTS). Поділіться своїм досвідом оновлення до Java 21 або вивчення нових можливостей — мені буде цікаво почути вашу думку!

Java 21 надає розробникам більше інструментів для написання виразного, ефективного та підтримуваного коду, при цьому зберігаючи головну рису платформи — зворотну сумісність.

Перекладено з: From Java 17 to Java 21: What’s the Improvement?

Leave a Reply

Your email address will not be published. Required fields are marked *