Rilis Java SE 20

Setelah enam bulan pengembangan, Oracle telah merilis platform Java SE 20 (Java Platform, Standard Edition 20), yang menggunakan proyek sumber terbuka OpenJDK sebagai implementasi referensi. Dengan pengecualian penghapusan beberapa fitur yang tidak digunakan lagi, Java SE 20 mempertahankan kompatibilitas mundur dengan rilis platform Java sebelumnya—sebagian besar proyek Java yang ditulis sebelumnya akan tetap berfungsi tanpa modifikasi saat dijalankan di bawah versi baru. Build Java SE 20 (JDK, JRE, dan Server JRE) yang dapat diinstal disiapkan untuk Linux (x86_64, AArch64), Windows (x86_64), dan macOS (x86_64, AArch64). Dikembangkan oleh proyek OpenJDK, implementasi referensi Java 20 sepenuhnya open source di bawah lisensi GPLv2 dengan pengecualian GNU ClassPath untuk memungkinkan penautan dinamis ke produk komersial.

Java SE 20 dikategorikan sebagai rilis dukungan reguler, dengan pembaruan yang akan dirilis sebelum rilis berikutnya. Cabang Dukungan Jangka Panjang (LTS) harus Java SE 17, yang akan menerima pembaruan hingga 2029. Ingatlah bahwa dimulai dengan rilis Java 10, proyek beralih ke proses pengembangan baru, yang menyiratkan siklus pembentukan rilis baru yang lebih pendek. Fungsionalitas baru sekarang sedang dikembangkan dalam satu cabang master yang terus diperbarui, yang menggabungkan perubahan yang telah diselesaikan dan dari mana cabang bercabang setiap enam bulan untuk menstabilkan rilis baru.

Fitur baru di Java 20 meliputi:

  • Terdapat dukungan awal untuk Scoped Values, yang memungkinkan data yang tidak dapat diubah untuk dibagikan di seluruh thread dan pertukaran data secara efisien antar thread anak (nilai diwariskan). Scoped Values ​​​​sedang dikembangkan untuk menggantikan mekanisme variabel thread-lokal dan lebih efisien ketika menggunakan thread virtual dalam jumlah yang sangat besar (ribuan atau jutaan thread). Perbedaan utama antara Scoped Values ​​​​dan variabel lokal thread adalah variabel lokal ditulis satu kali, tidak dapat diubah di masa mendatang, dan tetap tersedia hanya selama durasi eksekusi thread. server kelas { ScopedValue statis akhir CURRENT_USER = ScopedValue baru(); void serve(Permintaan permintaan, Respon respon) { var level = (request.isAuthorized()? ADMIN : TAMU); var pengguna = Pengguna baru(tingkat); ScopedValue.where(CURRENT_USER, pengguna).run(() -> Application.handle(permintaan, respons)); } } class DatabaseManager { DBConnection open() { var pengguna = Server.CURRENT_USER.get(); if (!user.canOpen()) melempar InvalidUserException(); kembalikan DBConnection baru(...); } }
  • Pratinjau pola rekaman kedua telah ditambahkan, memperluas fitur pencocokan pola yang diperkenalkan di Java 16 untuk mengurai nilai kelas rekaman. Misalnya: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); Sistem.keluar.println(x+y); } }
  • Implementasi awal keempat dari pencocokan pola dalam pernyataan “switch” telah ditambahkan, memungkinkan label “case” untuk tidak menggunakan nilai yang tepat, tetapi pola fleksibel yang mencakup serangkaian nilai sekaligus, yang sebelumnya perlu menggunakan yang rumit rangkaian ekspresi “jika… lain”. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Panjang l -> String.format("panjang %d", l); case Ganda d -> String.format("ganda %f", d); kasus String s -> String.format("String %s", s); default -> o.toString(); }; }
  • Implementasi awal kedua dari API FFM (Fungsi & Memori Asing) telah ditambahkan, yang memungkinkan Anda mengatur interaksi program Java dengan kode dan data eksternal melalui pemanggilan fungsi dari perpustakaan eksternal dan mengakses memori di luar JVM.
  • Pratinjau kedua dari thread virtual telah ditambahkan, yang merupakan thread ringan yang sangat menyederhanakan penulisan dan memelihara aplikasi multi-thread berkinerja tinggi.
  • Menambahkan API eksperimental kedua untuk paralelisme terstruktur, yang menyederhanakan pengembangan aplikasi multi-thread dengan memperlakukan banyak tugas yang berjalan di thread berbeda sebagai satu blok.
  • Pratinjau kelima dari API Vektor telah ditambahkan, menyediakan fungsi untuk penghitungan vektor yang dilakukan menggunakan instruksi vektor pada prosesor x86_64 dan AArch64 dan memungkinkan operasi diterapkan secara bersamaan ke beberapa nilai (SIMD). Berbeda dengan kemampuan yang disediakan dalam kompiler HotSpot JIT untuk vektorisasi otomatis operasi skalar, API baru memungkinkan kontrol vektorisasi secara eksplisit untuk pemrosesan data paralel.

Sumber: opennet.ru

Tambah komentar