Rilis platform Java SE 22 dan implementasi referensi terbuka OpenJDK 22

Setelah enam bulan pengembangan, Oracle telah merilis platform Java SE 22 (Java Platform, Standard Edition 22), yang menggunakan proyek open source OpenJDK sebagai implementasi referensinya. Dengan pengecualian penghapusan beberapa fitur yang sudah usang, Java SE 22 mempertahankan kompatibilitas mundur dengan rilis platform Java sebelumnya—sebagian besar proyek Java yang ditulis sebelumnya akan berjalan tanpa perubahan saat dijalankan di bawah versi baru. Versi Java SE 22 (JDK, JRE, dan Server JRE) yang siap diinstal telah disiapkan untuk Linux (x86_64, AArch64), Windows (x86_64) dan macOS (x86_64, AArch64). Dikembangkan oleh proyek OpenJDK, implementasi referensi Java 22 sepenuhnya bersifat open source di bawah lisensi GPLv2 dengan Pengecualian GNU ClassPath, yang memungkinkan penautan dinamis dengan produk komersial.

Java SE 22 diklasifikasikan sebagai rilis dukungan reguler, dengan pembaruan yang berlanjut hingga rilis berikutnya. Cabang dukungan jangka panjang (LTS) seharusnya adalah Java SE 21 atau Java SE 17, yang akan terus menerima pembaruan masing-masing hingga tahun 2031 dan 2029 (umumnya tersedia hingga tahun 2028 dan 2026). Dukungan umum untuk cabang Java SE 11 LTS berakhir September lalu, tetapi dukungan lanjutan akan berlanjut hingga tahun 2032. Dukungan lanjutan untuk cabang Java SE 8 LTS akan berlanjut hingga tahun 2030.

Sebagai pengingat, sejak rilis Java 10, proyek ini beralih ke proses pengembangan baru yang melibatkan siklus rilis yang lebih pendek. Fungsionalitas baru kini dikembangkan dalam satu cabang master yang terus diperbarui, yang menggabungkan perubahan yang telah selesai dan cabang-cabangnya bercabang setiap enam bulan untuk menstabilkan rilis baru.

Fitur baru di Java 22 meliputi:

  • Pengumpul sampah G1 mengimplementasikan dukungan untuk penyematan wilayah, yang memungkinkan objek Java untuk disematkan sementara di memori guna mencegah pemindahannya oleh pengumpul sampah dan memastikan transfer referensi yang aman ke objek-objek ini antara Java dan kode asli. Penyematan mengurangi latensi dan menghindari penonaktifan pengumpulan sampah saat mengeksekusi wilayah penting JNI (Java Native Interface) dengan kode asli (selama eksekusi wilayah ini, JVM tidak boleh memindahkan objek penting yang terkait dengannya untuk menghindari kondisi balapan). Penyematan menghapus objek penting dari tampilan pengumpul sampah, sehingga pengumpul sampah dapat terus membersihkan wilayah yang belum disematkan.
  • Menambahkan fitur awal yang memungkinkan ekspresi dalam konstruktor mendahului pemanggilan super(…), yang digunakan untuk secara eksplisit memanggil konstruktor kelas induk dari konstruktor kelas turunan, selama ekspresi tersebut tidak merujuk ke instance yang dibuat oleh konstruktor. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • API FFM (Foreign Function & Memory) telah distabilkan, memungkinkan program Java untuk berinteraksi dengan kode dan data eksternal dengan memanggil fungsi dari pustaka eksternal dan mengakses memori di luar JVM, tanpa menggunakan JNI (Java Native Interface).
  • Bahasa Indonesia: Mengaktifkan dukungan untuk variabel anonim dan pencocokan pola — alih-alih variabel dan pola yang tidak terpakai tetapi wajib, kini Anda dapat menentukan karakter "_". // sebelumnya String pageName = switch (halaman) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ... }; // sekarang Anda dapat String pageName = switch (halaman) { case GitHubIssuePage(_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • Implementasi awal API Class-File untuk mengurai, menghasilkan, dan mentransformasi berkas kelas Java diusulkan. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(«debug»))) { classBuilder.with(ce); } } });
  • Utilitas Java mengimplementasikan kemampuan untuk menjalankan program Java yang disediakan sebagai beberapa berkas kode atau pustaka kelas yang telah dikompilasi sebelumnya tanpa mengompilasi berkas-berkas ini secara terpisah atau mengonfigurasi sistem build. Fitur baru ini menyederhanakan proses menjalankan program di mana kode untuk kelas yang berbeda dipisahkan ke dalam berkas-berkas terpisah. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); } }

    Misalnya, untuk menjalankan program yang terdiri dari dua berkas "Prog.java" dan "Helper.java", kini cukup menjalankan "java Prog.java", yang akan mengompilasi kelas Prog, menentukan referensi ke kelas Helper, mencari dan mengompilasi berkas Helper.java, dan memanggil metode utama.

  • Menambahkan implementasi awal kedua dari Templat String, yang diimplementasikan sebagai tambahan untuk literal string dan blok teks. Templat String memungkinkan Anda menggabungkan teks dengan ekspresi dan variabel terhitung tanpa menggunakan operator "+". Substitusi ekspresi dilakukan menggunakan substitusi \{..}, dan pengendali khusus dapat dihubungkan untuk memeriksa kebenaran nilai yang disubstitusi. Misalnya, pengendali SQL memastikan validitas nilai yang disubstitusikan ke dalam kode SQL dan mengembalikan objek java.sql.Statement, sementara pengendali JSON memantau kebenaran substitusi JSON dan mengembalikan JsonNode. String query = "SELECT * FROM Person p WHERE p." + property + " = '" + value + "'"; // adalah Statement query = SQL.»»»SELECT * FROM Person p WHERE p.\{property} = '\{value}'»»»; // menjadi
  • Implementasi awal ketujuh dari Vector API telah ditambahkan. API ini menyediakan fungsi untuk komputasi vektor yang dilakukan menggunakan instruksi vektor prosesor x86_64 dan AArch64, serta memungkinkan operasi simultan pada beberapa nilai (SIMD). Berbeda dengan vektorisasi otomatis operasi skalar pada kompiler HotSpot JIT, API baru ini memungkinkan kontrol eksplisit atas vektorisasi untuk pemrosesan data paralel.
  • Menambahkan implementasi awal Stream API yang diperluas, yang mendukung pendefinisian operasi perantara kustom. Operasi ini dapat berguna jika operasi perantara bawaan yang ada tidak mencukupi untuk transformasi data yang diinginkan. Penangan kustom ditambahkan menggunakan operasi perantara Stream::gather(Gatherer) yang baru, yang memproses elemen stream dengan menerapkan penangan yang ditentukan pengguna. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Versi kedua dari API eksperimental untuk Structured Concurrency, yang menyederhanakan pengembangan aplikasi multithread dengan memperlakukan beberapa tugas yang berjalan di thread berbeda sebagai satu unit, telah diusulkan untuk pengujian.
  • Menambahkan implementasi awal kedua dari kelas yang dideklarasikan secara implisit dan instans metode "utama" yang tidak disebutkan namanya, yang dapat dilakukan tanpa deklarasi publik/statis, dengan meneruskan array argumen, dan entitas lain yang terkait dengan deklarasi kelas. // sebelumnya adalah public class HelloWorld { public static void main(String[] args) { System.out.println("Halo dunia!"); } } // sekarang Anda dapat void main() { System.out.println("Halo, Dunia!"); }
  • Implementasi awal kedua dari Scoped Values ​​telah ditambahkan. Implementasi ini memungkinkan pembagian data yang tidak dapat diubah antar thread dan pertukaran data yang efisien antar thread anak (nilai diwariskan). Scoped Values ​​dirancang untuk menggantikan mekanisme variabel lokal-thread dan lebih efisien ketika menggunakan thread virtual dalam jumlah yang sangat besar (ribuan dan jutaan thread). Perbedaan utama antara Scoped Values ​​dan variabel lokal-thread adalah keduanya ditulis sekali, tidak dapat diubah, dan hanya tersedia selama thread tersebut dieksekusi.
  • Pengumpul sampah Paralel telah meningkatkan kinerja saat bekerja dengan array objek besar. Optimasi ini telah mengurangi latensi sebelum pencarian objek sebesar 20% dalam beberapa pengujian dengan array objek besar.

Selain itu, kami ingin menyoroti peluncuran pembaruan pada platform JavaFX 22 untuk membuat aplikasi dengan antarmuka grafis.

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster