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 sumber terbuka OpenJDK sebagai implementasi referensi. Dengan pengecualian penghapusan beberapa fitur yang tidak digunakan lagi, Java SE 22 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 22 (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 22 sepenuhnya open source di bawah lisensi GPLv2 dengan pengecualian GNU ClassPath untuk memungkinkan penautan dinamis ke produk komersial.

Java SE 22 tergolong rilis dukungan reguler dan akan terus menerima pembaruan hingga rilis berikutnya. Cabang Dukungan Jangka Panjang (LTS) haruslah Java SE 21 atau Java SE 17, yang akan menerima pembaruan masing-masing hingga tahun 2031 dan 2029 (umumnya tersedia hingga tahun 2028 dan 2026). Dukungan publik untuk cabang LTS Java SE 11 berakhir pada September lalu, namun dukungan yang diperluas akan berlanjut hingga tahun 2032. Dukungan yang diperluas untuk cabang LTS Java SE 8 akan berlanjut hingga tahun 2030.

Izinkan kami mengingatkan Anda bahwa dimulai dengan rilis Java 10, proyek beralih ke proses pengembangan baru, yang menyiratkan siklus yang lebih pendek untuk pembentukan rilis baru. Fungsionalitas baru kini dikembangkan dalam satu cabang master yang terus diperbarui, yang mencakup perubahan siap pakai dan cabang mana yang dicabangkan setiap enam bulan untuk menstabilkan rilis baru.

Fitur baru di Java 22 meliputi:

  • Pengumpul sampah G1 menyertakan dukungan untuk penyematan wilayah, yang memungkinkan Anda memperbaiki sementara lokasi objek Java di memori agar objek tersebut tidak dipindahkan oleh pengumpul sampah dan memungkinkan referensi ke objek tersebut diteruskan dengan aman antara Java dan kode asli. Penyematan memungkinkan Anda mengurangi latensi dan menghindari penonaktifan pengumpulan sampah saat menjalankan wilayah penting JNI (Java Native Interface) dengan kode asli (saat menjalankan bagian ini, JVM tidak boleh memindahkan objek penting yang terkait dengannya untuk menghindari kondisi balapan). Penyematan menghilangkan objek penting dari pandangan pengumpul sampah, yang dapat terus membersihkan area yang tidak dipasangi pin.
  • Fitur awal telah ditambahkan untuk memungkinkan ekspresi ditentukan dalam konstruktor sebelum memanggil super(...), digunakan untuk secara eksplisit memanggil konstruktor kelas induk dari konstruktor kelas yang diwarisi jika ekspresi tersebut tidak merujuk ke instance yang dibuat oleh konstruktor. kelas Luar { void hello() { System.out.println("Halo"); } kelas Batin { Batin() { hello(); super(); } } }
  • API FFM (Fungsi & Memori Asing) telah distabilkan, memungkinkan interaksi program Java dengan kode dan data eksternal dengan memanggil fungsi dari perpustakaan eksternal dan mengakses memori di luar JVM, tanpa menggunakan JNI (Java Native Interface).
  • Dukungan untuk variabel dan pola yang tidak disebutkan namanya telah diaktifkan - alih-alih variabel dan pola yang tidak digunakan tetapi diperlukan saat memanggil, Anda kini dapat menentukan karakter “_”. // tadinya 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 dari Class-File API diusulkan untuk mengurai, menghasilkan, dan mengonversi file kelas Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(byte); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). dimulaiDengan("debug"))) { classBuilder.dengan(ce); } } });
  • Utilitas java menyediakan kemampuan untuk menjalankan program Java, yang disediakan dalam bentuk beberapa file kode atau perpustakaan kelas yang telah dikompilasi sebelumnya, tanpa mengkompilasi file-file ini secara terpisah dan tanpa mengkonfigurasi sistem build. Fitur baru ini memudahkan menjalankan program di mana kode dari kelas yang berbeda dipisahkan menjadi file terpisah. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Halo!"); } }

    Misalnya untuk menjalankan program yang terdiri dari dua file "Prog.java" dan "Helper.java" sekarang cukup menjalankan "java Prog.java", yang akan mengkompilasi kelas Prog, menentukan referensi ke kelas Helper, temukan dan kompilasi file Helper.java dan panggil metode utama.

  • Menambahkan implementasi awal kedua dari Templat String, yang diimplementasikan selain literal string dan blok teks. Templat string memungkinkan Anda menggabungkan teks dengan ekspresi dan variabel terhitung tanpa menggunakan operator +. Substitusi ekspresi dilakukan dengan menggunakan substitusi \{..}, dan penangan khusus dapat dihubungkan untuk memeriksa kebenaran nilai yang diganti. Misalnya, mesin SQL memeriksa nilai yang diganti ke dalam kode SQL dan mengembalikan objek java.sql.Statement sebagai output, sedangkan prosesor JSON memantau kebenaran substitusi JSON dan mengembalikan JsonNode. String query = "PILIH * DARI Orang p DIMANA p." + properti + " = '" + nilai + "'"; // was Kueri pernyataan = SQL."""PILIH * DARI Orang p WHERE p.\{property} = '\{value}'"""; // menjadi
  • Pratinjau ketujuh 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.
  • Implementasi awal dari Stream API yang diperluas telah ditambahkan yang mendukung penentuan operasi perantara Anda sendiri, yang mungkin berguna jika operasi perantara bawaan yang ada tidak cukup untuk transformasi data yang diinginkan. Penangan asli terhubung menggunakan operasi perantara baru Stream::gather(Gatherer), yang memproses elemen aliran dengan menerapkan penangan yang ditentukan pengguna ke elemen tersebut. 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 Konkurensi Terstruktur telah diusulkan untuk pengujian, yang menyederhanakan pengembangan aplikasi multi-thread dengan memproses banyak tugas yang dijalankan di thread berbeda sebagai satu blok.
  • Menambahkan implementasi awal kedua dari kelas yang dideklarasikan secara implisit dan instance metode "utama" yang tidak disebutkan namanya, yang dapat membuang deklarasi publik/statis, meneruskan serangkaian argumen, dan entitas lain yang terkait dengan deklarasi kelas. // tadinya public class HelloWorld { public static void main(String[] args) { System.out.println("Halo dunia!"); } } // sekarang Anda dapat membatalkan main() { System.out.println("Halo, Dunia!"); }
  • Menambahkan implementasi pratinjau kedua dari Scoped Values, yang memungkinkan data yang tidak dapat diubah dibagikan ke 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.
  • Pengumpul sampah Paralel telah meningkatkan kinerja saat bekerja dengan sejumlah besar objek. Pengoptimalan memungkinkan dalam beberapa pengujian dengan sejumlah besar objek untuk mengurangi penundaan sebelum mulai mencari objek sebesar 20%.

Selain itu, Anda dapat mencatat publikasi pembaruan pada platform untuk membuat aplikasi dengan antarmuka grafis JavaFX 22.

Sumber: opennet.ru

Tambah komentar