Rilis Java SE 16

Setelah enam bulan pengembangan, Oracle merilis Java SE 16 (Java Platform, Standard Edition 16), yang menggunakan proyek OpenJDK sebagai referensi implementasi. Java SE 16 mempertahankan kompatibilitas dengan rilis platform Java sebelumnya; semua proyek Java yang ditulis sebelumnya akan berfungsi tanpa perubahan saat diluncurkan di bawah versi baru. Build Java SE 16 (JDK, JRE dan Server JRE) yang siap diinstal disiapkan untuk Linux (x86_64, AArch64), Windows dan macOS. Dikembangkan oleh proyek OpenJDK, implementasi referensi Java 16 sepenuhnya open source di bawah lisensi GPLv2, dengan pengecualian GNU ClassPath yang memungkinkan tautan dinamis dengan produk komersial.

Java SE 16 tergolong rilis dukungan umum dan akan terus menerima pembaruan hingga rilis berikutnya. Cabang Dukungan Jangka Panjang (LTS) seharusnya adalah Java SE 11, yang akan terus menerima pembaruan hingga tahun 2026. Rilis LTS berikutnya dijadwalkan pada September 2021. 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.

Dalam persiapan untuk rilis baru, pengembangan telah berpindah dari sistem kontrol versi Mercurial ke Git dan platform pengembangan kolaboratif GitHub. Migrasi ini diharapkan dapat meningkatkan kinerja operasi repositori, meningkatkan efisiensi penyimpanan, memberikan akses terhadap perubahan sepanjang riwayat proyek, meningkatkan dukungan untuk tinjauan kode, dan memungkinkan API untuk mengotomatisasi alur kerja. Selain itu, penggunaan Git dan GitHub membuat proyek ini lebih menarik bagi pemula dan pengembang yang terbiasa menggunakan Git.

Fitur baru di Java 16 meliputi:

  • Menambahkan modul eksperimental jdk.incubator.vector dengan implementasi Vector API, yang 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 Anda mengontrol vektorisasi secara eksplisit untuk pemrosesan data paralel.
  • Kode JDK dan VM HotSpot yang ditulis dalam C++ diizinkan untuk menggunakan fitur yang diperkenalkan dalam spesifikasi C++14. Sebelumnya, standar C++98/03 diperbolehkan.
  • ZGC (Z Garbage Collector), yang beroperasi dalam mode pasif dan meminimalkan penundaan akibat pengumpulan sampah, telah menambahkan kemampuan untuk memproses tumpukan thread secara paralel tanpa menjeda thread aplikasi. ZGC sekarang hanya memiliki pekerjaan yang memerlukan penangguhan, yang memiliki penundaan konstan, biasanya tidak melebihi beberapa ratus mikrodetik.
  • Menambahkan dukungan untuk soket Unix (AF_UNIX) ke kelas SocketChannel, ServerSocketChannel dan java.nio.channels.
  • Sebuah port telah diimplementasikan untuk distribusi Linux Alpine dengan musl perpustakaan C standar, yang populer di lingkungan untuk container, layanan mikro, cloud, dan sistem tertanam. Port yang diusulkan di lingkungan seperti itu memungkinkan Anda menjalankan program Java seperti aplikasi biasa. Selain itu, dengan menggunakan jlink, Anda dapat menghapus semua modul yang tidak digunakan dan menciptakan lingkungan minimal yang cukup untuk menjalankan aplikasi, yang memungkinkan Anda membuat gambar ringkas khusus aplikasi.
  • Mekanisme Elastic Metaspace telah diterapkan, mengoptimalkan operasi alokasi dan pengembalian memori yang ditempati oleh metadata kelas (metaspace) di JVM HotSpot. Penggunaan Elastic Metaspace mengurangi fragmentasi memori, mengurangi overhead pemuat kelas, dan juga memiliki efek menguntungkan pada kinerja aplikasi server yang berjalan lama karena pengembalian memori yang ditempati oleh metadata kelas yang tidak digunakan ke sistem operasi lebih cepat. Untuk memilih mode pelepasan memori setelah membongkar kelas, opsi “-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)” ditawarkan.
  • Port JDK telah ditambahkan untuk sistem Windows yang berjalan pada perangkat keras dengan prosesor berdasarkan arsitektur AArch64.
  • Pratinjau ketiga dari Foreign-Memory Access API telah diusulkan, memungkinkan aplikasi Java mengakses wilayah memori di luar heap Java dengan aman dan efisien dengan memanipulasi abstraksi MemorySegment, MemoryAddress, dan MemoryLayout yang baru.
  • API Foreign Linker eksperimental telah diterapkan, menyediakan akses dari Java ke kode asli. Bersama dengan Foreign-Memory API, antarmuka pemrograman baru mempermudah pembuatan wrapper pada pustaka bersama konvensional.
  • Menambahkan utilitas jpackage, yang memungkinkan Anda membuat paket untuk aplikasi Java mandiri. Utilitas ini didasarkan pada javapackager dari JavaFX dan memungkinkan Anda membuat paket dalam format asli untuk berbagai platform (msi dan exe untuk Windows, pkg dan dmg untuk macOS, deb dan rpm untuk Linux). Paket-paket tersebut mencakup semua dependensi yang diperlukan.
  • Enkapsulasi ketat pada semua internal JDK diaktifkan secara default, dengan pengecualian API penting seperti sun.misc.Unsafe. Nilai opsi “--illegal-access” sekarang disetel ke “deny” dan bukan “permit” secara default, yang akan memblokir upaya kode untuk mengakses sebagian besar kelas, metode, dan bidang internal. Untuk melewati batasan tersebut, gunakan opsi “-illegal-access=permit”.
  • Implementasi pencocokan pola pada operator “instanceof” telah distabilkan, yang memungkinkan Anda untuk segera menentukan variabel lokal untuk merujuk ke nilai yang dicentang. Misalnya, Anda dapat langsung menulis “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” tanpa secara eksplisit mendefinisikan “String s = (String) obj”. Was: if (obj instanceof Group) { Grup grup = (Grup) objek; var entri = grup.getEntries(); } Sekarang Anda dapat melakukannya tanpa mendefinisikan “Grup grup = (Grup) obj”: if (obj instanceof Grup grup) { var entri = grup.getEntries(); }
  • Implementasi kata kunci "record" telah distabilkan, memberikan bentuk kompak untuk definisi kelas yang menghilangkan kebutuhan untuk secara eksplisit mendefinisikan berbagai metode tingkat rendah seperti sama dengan(), hashCode() dan toString() dalam kasus di mana data disimpan hanya di bidang yang tidak berubah. Bila sebuah kelas menggunakan implementasi standar metode sama dengan(), hashCode() dan toString(), kelas tersebut bisa melakukannya tanpa definisi eksplisitnya: catatan publik BankTransaction(tanggal LocalDate, jumlah ganda, deskripsi String) {}

    Deklarasi ini secara otomatis akan menambahkan implementasi metode sama dengan(), hashCode() dan toString() selain metode konstruktor dan pengambil.

  • Draf kedua diusulkan untuk kelas dan antarmuka tersegel yang tidak dapat digunakan oleh kelas dan antarmuka lain untuk mewarisi, memperluas, atau mengesampingkan implementasi. Kelas tersegel juga menyediakan cara yang lebih deklaratif untuk membatasi penggunaan superkelas dibandingkan pengubah akses, berdasarkan daftar eksplisit subkelas yang diperbolehkan untuk ekstensi. paket com.example.geometry; izin Bentuk kelas tertutup publik com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Sumber: opennet.ru

Tambah komentar