Rilis Java SE 17

Setelah enam bulan pengembangan, Oracle telah merilis platform Java SE 17 (Java Platform, Standard Edition 17), yang menggunakan proyek sumber terbuka OpenJDK sebagai implementasi referensi. Dengan pengecualian penghapusan beberapa fitur yang tidak digunakan lagi, Java SE 17 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 17 (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 17 sepenuhnya open source di bawah lisensi GPLv2 dengan pengecualian GNU ClassPath untuk memungkinkan penautan dinamis ke produk komersial.

Java SE 17 tergolong rilis Long Term Support (LTS) yang akan terus mendapat pembaruan hingga tahun 2029. Pembaruan untuk rilis pencapaian Java 16 sebelumnya telah dihentikan. Cabang LTS Java 11 sebelumnya akan didukung hingga tahun 2026. Rilis LTS berikutnya dijadwalkan pada September 2024. 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 17 meliputi:

  • Implementasi eksperimental pencocokan pola dalam ekspresi "saklar" diusulkan, yang memungkinkan penggunaan bukan nilai pasti dalam label "huruf", tetapi templat fleksibel yang mencakup serangkaian nilai sekaligus, yang sebelumnya perlu menggunakan yang rumit rangkaian ekspresi “jika… lain”. Selain itu, “switch” memiliki kemampuan untuk menangani nilai NULL. Benda o = 123L; String diformat = switch (o) { 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(); };
  • Dukungan yang stabil 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 {…}
  • Pratinjau kedua dari Vector API diusulkan, yang 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 pratinjau Foreign Function & Memory API, yang memungkinkan aplikasi berinteraksi dengan kode dan data di luar runtime Java. API baru memungkinkan Anda memanggil fungsi non-JVM secara efisien dan mengakses memori yang tidak dikelola JVM. Misalnya, Anda dapat memanggil fungsi dari pustaka bersama eksternal dan mengakses data proses tanpa menggunakan JNI.
  • Mesin rendering macOS yang mendukung Java 2D API, yang pada gilirannya mendukung Swing API, telah diadaptasi untuk menggunakan API grafis Metal. Platform macOS terus menggunakan OpenGL secara default, dan mengaktifkan dukungan Metal memerlukan pengaturan "-Dsun.java2d.metal=true" dan setidaknya menjalankan macOS 10.14.x.
  • Menambahkan port untuk platform macOS/AArch64 (komputer Apple berdasarkan chip Apple M1 baru). Fitur khusus port ini adalah dukungan untuk mekanisme perlindungan memori W^X (Write XOR Execute), di mana halaman memori tidak dapat diakses secara bersamaan untuk penulisan dan eksekusi. (kode hanya dapat dieksekusi setelah penulisan dinonaktifkan, dan penulisan ke halaman memori hanya dapat dilakukan setelah eksekusi dinonaktifkan).
  • Dikembalikan ke hanya menggunakan semantik strictfp untuk ekspresi floating point. Dukungan untuk semantik "default", yang tersedia sejak rilis Java 1.2, telah dihentikan, termasuk penyederhanaan untuk bekerja pada sistem dengan koprosesor matematika x87 yang sangat lama (setelah munculnya instruksi SSE2, kebutuhan akan semantik tambahan menghilang).
  • Jenis antarmuka baru untuk generator bilangan pseudorandom telah diterapkan, dan algoritma tambahan telah diterapkan untuk menghasilkan bilangan acak yang lebih baik. Aplikasi diberi kesempatan untuk memilih algoritma untuk menghasilkan bilangan pseudorandom. Peningkatan dukungan untuk menghasilkan aliran objek acak.
  • Menerapkan enkapsulasi ketat pada semua internal JDK, kecuali API penting seperti sun.misc.Unsafe. Enkapsulasi yang ketat memblokir upaya dari kode untuk mengakses kelas, metode, dan bidang internal. Sebelumnya, mode enkapsulasi ketat dapat dinonaktifkan menggunakan opsi "--illegal-access=permit", namun kini sudah tidak digunakan lagi. Aplikasi yang memerlukan akses ke kelas, metode, dan bidang internal harus mendefinisikannya secara eksplisit menggunakan opsi --add-opens atau atribut Add-Opens di file manifes.
  • Aplikasi diberi kemampuan untuk menentukan filter deserialisasi data, yang peka konteks dan dipilih secara dinamis berdasarkan operasi deserialisasi tertentu. Filter yang ditentukan berlaku untuk seluruh mesin virtual (seluruh JVM), mis. tidak hanya mencakup aplikasi itu sendiri, tetapi juga perpustakaan pihak ketiga yang digunakan dalam aplikasi.
  • Swing telah menambahkan metode javax.swing.filechooser.FileSystemView.getSystemIcon untuk memuat ikon besar guna meningkatkan UI pada layar DPI Tinggi.
  • Java.net.DatagramSocket API menyediakan dukungan untuk menyambung ke grup Multicast tanpa memerlukan java.net.MulticastSocket API terpisah.
  • Utilitas IGV (Ideal Graph Visualizer) telah ditingkatkan, menyediakan visualisasi interaktif representasi kode perantara dalam kompiler HotSpot VM C2 JIT.
  • Di JavaDoc, dengan analogi dengan kompiler javac, ketika kesalahan dikeluarkan, nomor baris yang bermasalah di file sumber dan lokasi kesalahan sekarang ditunjukkan.
  • Menambahkan properti native.encoding, yang mencerminkan nama pengkodean karakter sistem (UTF-8, koi8-r, cp1251, dll.).
  • Antarmuka java.time.InstantSource telah ditambahkan, memungkinkan manipulasi waktu tanpa mengacu pada zona waktu.
  • Menambahkan API java.util.HexFormat untuk mengonversi ke representasi heksadesimal dan sebaliknya.
  • Mode lubang hitam telah ditambahkan ke kompiler, yang menonaktifkan operasi penghapusan kode mati, yang dapat digunakan saat melakukan uji kinerja.
  • Menambahkan opsi “-Xlog:async” ke Runtime untuk mencatat log dalam mode asinkron.
  • Saat membuat koneksi aman, TLS 1.3 diaktifkan secara default (sebelumnya TLS 1.2 digunakan).
  • Applet API yang sebelumnya dinyatakan usang (java.applet.Applet*, javax.swing.JApplet), yang digunakan untuk menjalankan aplikasi Java di browser, telah dipindahkan ke kategori dijadwalkan untuk dihapus (kehilangan relevansi setelah dukungan berakhir untuk plugin Java untuk browser).
  • Manajer Keamanan, yang telah lama kehilangan relevansinya dan ternyata tidak diklaim setelah dukungan untuk plugin browser berakhir, telah dipindahkan ke kategori yang dijadwalkan untuk dihapus.
  • Mekanisme Aktivasi RMI telah dihapus, yang sudah usang, diturunkan ke kategori opsi di Java 8 dan hampir tidak pernah digunakan dalam praktik modern.
  • Kompiler eksperimental yang mendukung JIT (just-in-time) untuk kompilasi dinamis kode Java untuk HotSpot JVM, serta mode kompilasi antisipatif (AOT, di depan waktu) kelas ke dalam kode mesin sebelum memulai mesin virtual , telah dihapus dari SDK. Kompilernya ditulis dalam Java dan berdasarkan pada karya proyek Graal. Perlu dicatat bahwa pemeliharaan kompiler memerlukan banyak tenaga kerja, yang tidak dibenarkan bila tidak ada permintaan dari pengembang.

Sumber: opennet.ru

Tambah komentar