Changelog JDK Java 21: Semua Fitur Baru
Daftar lengkap fitur dan JEP pada JDK 21, rilis LTS September 2023, termasuk Virtual Threads, Record Patterns, Pattern Matching for switch, dan Sequenced Collections.
Changelog JDK Java 21
JDK 21 dirilis pada 19 September 2023 dan merupakan rilis LTS terbaru, menggantikan JDK 17. Ini adalah rilis terbesar sejak JDK 8, dengan Virtual Threads, Record Patterns, dan Pattern Matching for switch resmi menjadi fitur permanen.
Ringkasan JEP
| Nomor | Nama Fitur |
|---|---|
| 430 | String Templates (Preview) |
| 431 | Sequenced Collections |
| 439 | Generational ZGC |
| 440 | Record Patterns |
| 441 | Pattern Matching for switch |
| 442 | Foreign Function & Memory API (Third Preview) |
| 443 | Unnamed Patterns and Variables (Preview) |
| 444 | Virtual Threads |
| 445 | Unnamed Classes and Instance Main Methods (Preview) |
| 446 | Scoped Values (Preview) |
| 448 | Vector API (Sixth Incubator) |
| 449 | Deprecate the Windows 32-bit x86 Port for Removal |
| 451 | Prepare to Disallow the Dynamic Loading of Agents |
| 452 | Key Encapsulation Mechanism API |
| 453 | Structured Concurrency (Preview) |
Fitur Utama
Virtual Threads Menjadi Standar (JEP 444)
Setelah dua kali preview (JDK 19 dan JDK 20), Virtual Threads resmi menjadi bagian permanen Java — menyederhanakan penulisan aplikasi konkuren berthroughput tinggi:
// Seat-server: satu thread per request dengan biaya sangat ringan
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> System.out.println("Tugas pada virtual thread"));
}
Record Patterns Menjadi Standar (JEP 440)
Record Patterns berada dalam pola destructuring yang lengkap, bersama dengan nested patterns:
record Point(int x, int y) { }
record Line(Point a, Point b) { }
if (obj instanceof Line(Point(var x1, var y1), Point(var x2, var y2))) {
System.out.printf("(%d,%d)-(%d,%d)%n", x1, y1, x2, y2);
}
Pattern Matching for switch Menjadi Standar (JEP 441)
Switch kini dapat melakukan pattern matching pada tipe, memberikan pendekatan ekspresif dan exhaustive:
record Square(double side) implements Shape { }
record Circle(double r) implements Shape { }
static double area(Shape s) {
return switch (s) {
case Square(double side) -> side * side;
case Circle(double r) -> Math.PI * r * r;
};
}
Sequenced Collections (JEP 431)
Antarmuka baru untuk akses elemen pertama/terakhir dengan cara yang terstandar:
SequencedCollection<String> list = new ArrayList<>();
list.addLast("a");
list.addLast("b");
String first = list.getFirst(); // "a"
String last = list.getLast(); // "b"
Generational ZGC (JEP 439)
ZGC diperluas dengan mode generational yang memisahkan objek muda dan tua, menurunkan overhead alokasi dan pause:
java -XX:+UseZGC -XX:+ZGenerational -jar app.jar
String Templates (JEP 430) — Preview
Fasilitas string interpolation yang aman dan dapat dipilah (processors):
String name = "Dunia";
String msg = STR."Halo, \{name}!";
Unnamed Patterns and Variables (JEP 443) — Preview
Menggunakan _ untuk variabel yang tidak dibutuhkan:
case Point(_, _) -> "diabaikan";
Unnamed Classes and Instance Main Methods (JEP 445) — Preview
Menulis program sederhana tanpa boilerplate class dan public static void main:
void main() {
System.out.println("Halo tanpa class wrapper!");
}
Perubahan Lain
- Scoped Values (446): Dipromosikan menjadi preview.
- Structured Concurrency (453): Dipromosikan menjadi preview.
- Key Encapsulation Mechanism API (452): Dukungan KEM untuk post-quantum cryptography.
- Deprecate Windows 32-bit x86 Port (449).
- Prepare to Disallow Dynamic Loading of Agents (451).
- Foreign Function & Memory API (442): Preview ketiga.
- Vector API (448): Incubator keenam.
Kesimpulan
JDK 21 adalah rilis LTS yang mewujudkan janji Project Loom dan kepenuhan model pemrograman modern Java. Virtual Threads, Record Patterns, dan Pattern Matching for switch — bersama Records dan Sealed Classes dari rilis sebelumnya — menjadikan Java 21 target migrasi paling menarik. Bagi developer yang masih di JDK 8/11/17, JDK 21 merupakan prioritas upgrade berikutnya.