Setelah enam bulan pengembangan, Oracle menerbitkan platform Java SE 23 (Java Platform, Standard Edition 23), yang menggunakan proyek open-source OpenJDK sebagai referensi implementasi. Dengan pengecualian penghapusan beberapa fitur usang, Java SE 23 mempertahankan kompatibilitas dengan rilis platform Java sebelumnya - sebagian besar proyek Java yang ditulis sebelumnya akan berfungsi tanpa perubahan saat dijalankan pada versi baru. Build Java SE 22 (JDK, JRE dan Server JRE) yang siap diinstal disiapkan untuk Linux (x86_64, AArch64), Windows (x86_64) dan macOS (x86_64, AArch64). Dikembangkan oleh proyek OpenJDK, implementasi referensi Java 23 sepenuhnya open source di bawah lisensi GPLv2, dengan pengecualian GNU ClassPath yang memungkinkan tautan dinamis dengan produk komersial.
Java SE 23 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 yang diperluas untuk cabang LTS Java SE 8 akan berlangsung hingga tahun 2030, dan Java SE 11 hingga tahun 2032.
Di antara 23 inovasi yang diusulkan di Java SE:
- Mode operasi generatif pengumpul sampah ZGC (Generation Z Garbage Collector) diaktifkan secara default, menggunakan pemrosesan terpisah antara objek "lama" dan "muda", yang meningkatkan efisiensi pembersihan objek yang baru dibuat dengan masa pakai yang singkat. Menggunakan ZGC Generasi mengurangi risiko terhenti selama alokasi sumber daya, mengurangi beban CPU dan konsumsi memori selama pengumpulan sampah. Pengujian ZGC Generasi dengan Apache Cassandra 4 menunjukkan peningkatan throughput sebesar 4x dengan ukuran heap tetap dan pengurangan ukuran heap seperempat dengan throughput konstan.
- JavaDoc telah menambahkan dukungan untuk menggunakan Markdown untuk mendokumentasikan kode dalam komentar, yang dapat digunakan sebagai pengganti campuran tag HTML dan JavaDoc @.

- Mekanisme pencocokan pola telah ditingkatkan dengan dukungan awal untuk penggunaan tipe primitif (int, byte, char, dan tipe dasar non-objek lainnya) di semua jenis templat, dalam pernyataan "instanceof", dan di blok "switch". beralih (x.getStatus()) { kasus 0 -> “oke”; kasus 1 -> “peringatan”; kasus 2 -> “kesalahan”; case int i -> “status tidak diketahui:” + i; } jika (saya contoh byte b) { … b … }
- Menambahkan dukungan awal untuk menggunakan pernyataan "impor modul M" tunggal untuk mengimpor semua paket yang diekspor oleh modul tertentu sekaligus. Perubahan ini sangat menyederhanakan penggunaan kembali pustaka modular, memungkinkan Anda menyertakan pustaka dan kelas tanpa menentukan tempatnya dalam hierarki paket. Misalnya, menentukan “import module java.base” akan mengimpor seluruh 54 paket yang termasuk dalam modul java.base, yang sebelumnya perlu disebutkan secara terpisah (“import java.io.*”, “import java.util.* " dll.).
Implementasi awal kedua dari API File Kelas diusulkan untuk menguraikan, 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);
- Pratinjau kedelapan dari Vector API menyediakan fungsi untuk penghitungan vektor yang dijalankan 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.
- Menambahkan metode format, printf, readPassword, dan readLine ke kelas java.io.Console untuk memformat, menampilkan, dan membaca teks berdasarkan lokal yang dipilih. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", Tanggal baru()) 2024 Mei 16
- Implementasi pratinjau kedua 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]]
- Menambahkan implementasi awal ketiga 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 pratinjau kedua dari fitur yang memungkinkan konstruktor menentukan ekspresi 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(); } } }
- Menambahkan implementasi pratinjau ketiga 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.
- Pratinjau ketiga dari Structured Concurrency API telah diusulkan untuk pengujian, menyederhanakan pengembangan aplikasi multi-thread dengan memproses banyak tugas yang berjalan di thread berbeda sebagai satu blok.
- Metode akses memori eksternal (di luar JVM) yang disediakan oleh kelas sun.misc.Unsafe sudah tidak digunakan lagi dan dijadwalkan untuk dihapus. Untuk mengakses memori off-heap dan berinteraksi dengan kode eksternal, disarankan untuk menggunakan API VarHandle dan API FFM (Fungsi & Memori Asing).
Selain itu, kami dapat mencatat publikasi pembaruan pada platform untuk membuat aplikasi dengan antarmuka grafis JavaFX 23 dan penyertaan kompiler GraalVM JIT di Oracle JDK 23 utama.
Juga disajikan rilis baru mesin virtual universal GraalVM, yang mendukung menjalankan aplikasi dalam JavaScript (Node.js), Python, Ruby, R, bahasa apa pun untuk JVM (Java, Scala, Clojure, Kotlin) dan bahasa yang bitcode LLVM-nya dapat dihasilkan (C , C++, Rust). Selain mendukung JDK 23, versi baru ini mengoptimalkan konsumsi memori dan ukuran kode yang dapat dieksekusi, dan memberikan dukungan penuh untuk alat untuk menyematkan Python dan WebAssembly ke dalam kode Java menggunakan kompilasi JIT.
Sumber: opennet.ru

