Java Development Kit 22 (JDK 22), yang akan dirilis pada bulan Maret 2024 sebagai versi berikutnya dari Java Standard Edition, akan menyertakan 12 fitur, dengan pratinjau kedua dari scoped values dan pratinjau stream gatherers sebagai tambahan terakhir.

JDK 22 mencapai fase rampdown satu, dengan set fitur yang dibekukan, pada tanggal 7 Desember 2023, dan memasuki fase rampdown dua pada tanggal 18 Januari 2024. Ketersediaan umum ditetapkan pada 19 Maret, dengan dua kandidat rilis yang direncanakan untuk Februari. Bug akan diperiksa dari sekarang hingga rilis umum.

Scoped values memungkinkan berbagi data yang tidak dapat diubah secara aman dan efisien di dalam dan di seluruh thread. Ini lebih disukai daripada variabel thread-local, terutama ketika menggunakan variabel thread dalam jumlah besar. Tujuannya meliputi kemudahan penggunaan, kelengkapan, ketahanan, dan kinerja.

Stream gatherers akan meningkatkan API stream untuk mendukung operasi perantara khusus. Hal ini akan memungkinkan stream pipeline untuk mengubah data dengan cara yang tidak mudah dicapai dengan operasi perantara bawaan yang ada.

Fitur-fitur terbaru ini bergabung dengan pratinjau kedua structured concurency, pratinjau pernyataan sebelum super(…), pratinjau API class-file, penyematan wilayah untuk garbage collector G1, pratinjau kedua template string, variabel dan pola yang tidak disebutkan namanya, foreign function dan Memory API, dan incubator vektor API yang ketujuh. Pratinjau kedua dari kelas yang dideklarasikan secara implisit dan metode utama instance, dan peningkatan pada peluncur Java yang akan memungkinkannya untuk menjalankan program multi-file, juga telah diusulkan.

Versi akses awal JDK 22 tersedia di jdk.java.net untuk Linux, Windows, dan Mac.

Dengan structured concurrency, pemrograman konkuren disederhanakan melalui API yang memperlakukan kelompok tugas-tugas terkait yang berjalan di thread yang berbeda sebagai satu unit kerja, sehingga menyederhanakan penanganan dan pembatalan kesalahan, meningkatkan reliabilitas, dan meningkatkan observability. API ini dipratinjau di JDK 21 dan dikembangkan di JDK 19 dan JDK 20.

Peningkatan pada launcher aplikasi Java akan memungkinkannya untuk menjalankan program yang disediakan sebagai beberapa file kode sumber Java. Tujuan di balik kemampuan untuk meluncurkan program kode sumber multi-file adalah untuk membuat transisi dari program kecil ke program yang lebih besar menjadi lebih bertahap, sehingga memungkinkan para pengembang untuk memilih apa dan kapan mereka harus repot-repot mengonfigurasi alat bantu build.

API class-file akan menyediakan API standar untuk mem-parsing, menghasilkan, dan mengubah file kelas Java. Hal ini dimaksudkan untuk memungkinkan komponen JDK bermigrasi ke API standar dan pada akhirnya menghapus salinan internal JDK dari library ASM pihak ketiga. Parsing, generating, dan mentransformasi file kelas ada banyak di mana-mana, digunakan oleh alat dan library independen untuk memeriksa dan memperluas program tanpa mengorbankan maintainability kode sumber.

Format class-file Java mengalami tingkat evolusi yang lebih cepat karena irama rilis enam bulan sekali dari Java standar. Percepatan ini menyebabkan framework sering kali menemukan class file yang lebih baru daripada library class-file mereka, yang mengakibatkan error. Para pengembang framework terpaksa menulis ulang kode untuk memproses class file dari versi sebelumnya, dengan harapan perubahan yang signifikan tidak akan merusak upaya mereka. Untuk mengatasi hal ini, ada rencana untuk membuat API class-file standar dalam platform Java, yang memungkinkannya untuk berevolusi bersamaan dengan format class-file.

Pengenalan region pinning untuk G1 bertujuan untuk meminimalkan latensi dengan memungkinkan garbage collection (GC) untuk beroperasi tanpa dimatikan selama region critical Java Native Interface (JNI). Tujuannya antara lain untuk menghindari thread berhenti di wilayah JNI yang bersifat kritis, menghilangkan latensi tambahan untuk memulai garbage collection, mempertahankan waktu jeda GC tanpa regresi saat region ini tidak aktif, dan meminimalkan regresi pada waktu jeda GC saat region ini aktif. GC default saat ini, G1, menonaktifkan garbage collection pada setiap daerah kritis, yang secara signifikan berdampak pada latensi. Perubahan yang diusulkan memastikan bahwa thread Java tidak akan lagi menunggu operasi GC G1 selesai.

Pada JDK 21, kelas dan metode yang dideklarasikan secara implisit akan dipratinjau sebagai kelas dan metode tanpa nama. Pada pratinjau kedua JDK 22, fitur ini akan mengalami revisi judul dan perubahan yang signifikan. Tujuannya adalah untuk meningkatkan Java, memungkinkan pengembang untuk menulis program dasar tanpa harus mempelajari fitur-fitur yang dirancang untuk proyek yang lebih besar. Kemampuan ini memungkinkan deklarasi yang disederhanakan untuk progam kelas tunggal, sehingga memungkinkan perluasan tanpa batas seiring dengan kemajuan kemampuan mereka ke fitur-fitur yang lebih canggih. Pratinjau kedua memperkenalkan modifikasi pada deklarasi kelas dan pemanggilan metode, menyederhanakan proposal awal.

Pratinjau pernyataan sebelum super(…) berlaku untuk konstruktor, mengizinkan statement yang tidak mereferensikan instance yang sedang dibuat untuk mendahului konstruktor eksplisit. Rencana ini bertujuan untuk memberikan fleksibilitas yang lebih besar kepada para pengembang dalam mengekspresikan perilaku konstruktor, memungkinkan penempatan logika yang lebih alami tanpa bergantung pada metode statis tambahan, konstruktor perantara, atau argumen konstruktor.

Tujuan tambahannya adalah untuk mempertahankan jaminan yang ada bahwa konstruktor berjalan dalam urutan top-down selama inisialisasi kelas, mencegah kode dalam konstruktor subkelas mengganggu inisialisasi superclass. Yang penting, fitur ini merupakan fitur unik untuk JDK 22, menjadi satu-satunya fitur yang tidak pernah dipratinjau atau diuji coba dalam Java standar.

Memperkenalkan Template String dalam JDK

Template String Java yang akan datang menjanjikan untuk meningkatkan bahasa dengan integrasi teks literal dengan ekspresi dinamis dan pemroses template. Fitur inovatif ini bertujuan untuk menyederhanakan pemrograman Java, sehingga pengembang dapat dengan mudah mengekspresikan string yang menggabungkan nilai yang dihitung pada saat runtime. Terdapat beberapa tujuan yang ingin dicapai:

  1. Menyederhanakan Susunan Kode: Membuat penulisan program Java lebih intuitif dengan memudahkan pembuatan string yang secara dinamis memasukkan nilai yang dihitung pada saat runtime.
  2. Meningkatkan Keterbacaan: Meningkatkan kejelasan ekspresi yang memadukan teks dan elemen dinamis, baik yang menempati satu baris sumber atau meluas ke beberapa baris.
  3. Meningkatkan Keamanan: Memperkuat keamanan program yang membuat string dari nilai yang disediakan pengguna dengan mendukung validasi dan transformasi template dan ekspresi yang disematkan.
  4. Mempertahankan Fleksibilitas: Memungkinkan library Java untuk mendefinisikan sintaks pemformatan dalam template string, memastikan kemampuan beradaptasi dengan beragam skenario koding.
  5. Memfasilitasi Integrasi API: Menyederhanakan integrasi API yang menerima string dari bahasa non-Java, seperti XML dan JSON.
  6. Memberdayakan Pembuatan Nilai Non-string: Memungkinkan pembuatan nilai non-string secara langsung dari teks literal dan ekspresi yang disematkan, sehingga tidak perlu lagi menggunakan representasi string sebagai perantara.

Template string akan mulai digunakan pada pratinjau pertama JDK 21, dengan pratinjau berikutnya yang ditujukan untuk memperoleh masukan dan umpan balik. Selain dari modifikasi teknis pada jenis ekspresi template, tidak ada perubahan dibandingkan dengan pratinjau pertama.

Membuka Komputasi Vektor yang Optimal dengan Vector API (Inkubator Ketujuh)

Secara paralel, Vector API, yang saat ini berada di inkubator ketujuh, menandai terobosan dalam kemampuan Java untuk mengeksekusi komputasi vektor secara efisien. API ini memastikan bahwa komputasi vektor dapat dikompilasi secara handal pada saat runtime menjadi instruksi vektor yang optimal pada arsitektur CPU yang didukung, sehingga mengungguli komputasi skalar yang setara dalam segi performa.

Fitur utama API Vektor meliputi:

  1. Algoritma Vektor Ekspresif: Menyediakan mekanisme untuk mengartikulasikan algoritme vektor yang kompleks di Java, memanfaatkan algoritme vektorisasi otomatis HotSpot dengan model yang mudah digunakan untuk meningkatkan prediktabilitas dan ketahanan.
  2. Proses Pengembangan: Diawali sejak JDK 16 pada Maret 2021, Vector API bertujuan untuk menawarkan kejelasan dan ringkas sekaligus bersifat platform-agnostik, memastikan kompilasi runtime yang andal dan kinerja tertinggi pada arsitektur x64 AArch64, dengan degradasi yang mulus.
  3. Kompatibilitas dengan Peningkatan Project Valhalla: Selaras dengan peningkatan Project Valhalla pada model objek Java, memungkinkan interaksi tanpa batas dengan objek value.

Kemajuan ini menandakan komitmen Java untuk memberdayakan pengembang dengan fitur-fitur canggih, menyiapkan panggung untuk kode yang lebih efisien dan mudah dibaca.

Memanfaatkan variabel dan pola anonim menjadi penting dalam skenario di mana deklarasi atau nested pattern diperlukan tetapi tetap tidak terpakai. Tujuan dari inisiatif ini memiliki banyak aspek:

  • Menangkap Niat Developer:** Menekankan pentingnya niat developer dalam kasus-kasus di mana parameter binding atau lambda sengaja tidak digunakan. Pemberlakuan ini berfungsi untuk meningkatkan tingkat kejelasan program dan meminimalkan kemungkinan terjadinya kesalahan.
  • Meningkatkan Maintainability Kode:** Mengidentifikasi variabel yang tidak digunakan yang harus dideklarasikan berkontribusi pada peningkatan keseluruhan maintainability kode. Pendekatan proaktif ini membantu menciptakan basis kode yang lebih sederhana dan efisien.
  • Label Kasus yang Fleksibel:** Memungkinkan penyertaan beberapa pola dalam satu Label Kasus, asalkan tidak ada satupun yang mendeklarasikan pattern variable. Fleksibilitas ini meningkatkan ekspresifitas struktur kode.
  • Peningkatan Keterbacaan:** Mempermudah tingkat keterbacaan pola record dengan menghilangkan tipe nested pattern yang tidak perlu. Hal ini menghasilkan kode yang lebih bersih dan lebih mudah dipahami.

Proposal ini telah melalui tahap pratinjau di JDK 21 dan akan difinalisasi, tanpa perubahan, di JDK 22.

Beralih ke foreign function dan memory API, API ini memberdayakan program Java untuk berinteraksi dengan kode dan data secara mulus di luar runtime Java. Kemampuan ini, yang melibatkan pemanggilan foreign function dan mengakses foreign memory dengan aman, memungkinkan program Java untuk berinteraksi dengan library asli dan memproses data asli tanpa kerentanan yang berkaitan dengan JNI (Java Native Interface).

Foreign function dan memory API sebelumnya telah menjalani pratinjau di JDK 19, JDK 20, dan JDK 21, yang berakhir pada finalisasi di JDK 22. Revisi terbaru mencakup tiga area utama: dukungan untuk charset arbitrer untuk string asli, kemampuan bagi klien untuk secara programatik membangun deskriptor fungsi bahasa C, dan pengenalan atribut manifes JAR-file Enable-Native-Access. Yang terakhir ini memfasilitasi pemanggilan metode yang dibatasi dalam file JAR yang dapat dieksekusi tanpa memerlukan opsi baris perintah –enable-native-access.

Penting untuk dicatat bahwa Java 22 adalah perilisan Fitur, yang menerima dukungan selama enam bulan dari Oracle. Sebaliknya, JDK 21 yang baru saja diluncurkan adalah rilis Long Term Support (LTS), yang menjamin setidaknya delapan tahun dukungan. Perusahaan lain dapat memilih untuk menawarkan layanan dukungan yang lebih panjang untuk JDK 22. Pembaruan Java standar dijadwalkan setiap enam bulan, dengan rilis LTS terjadi setiap dua tahun.

Image by pch.vector

About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)...

View All Articles