Oracle mengonfirmasi bahwa Java Enhancement Proposal (JEP) 401 untuk Value Classes and Objects — bagian dari Project Valhalla yang telah lama dinanti — akan segera diintegrasikan ke dalam OpenJDK mainline pada awal bulan depan, menargetkan JDK 28. Konfirmasi ini datang langsung dari insinyur perangkat lunak Oracle, Lois Foltan. JDK 28 dijadwalkan rilis pada Maret 2027, sementara JDK 27 diharapkan hadir pada September tahun ini.
Foltan menyebut integrasi ini sebagai "perubahan yang sangat besar." Ia bahkan meminta kontributor OpenJDK lain untuk menghindari komitmen besar selama proses integrasi demi kelancaran. Sebagai gambaran besarnya, pull request untuk pratinjau pertama JEP 401 saja menambahkan lebih dari 197.000 baris kode di 1.816 file yang dimodifikasi.
Proyek ini telah berjalan sangat lama — pertama kali diajukan pada Agustus 2022 — sehingga beberapa pengamat bercanda bahwa mereka mungkin sudah sampai di Valhalla (alam akhirat dalam mitologi Nordik) sebelum proyek ini benar-benar selesai.
Inti masalah yang coba dipecahkan oleh JEP 401 adalah keterbatasan klasik Java: di luar sejumlah kecil tipe primitif seperti int, char, byte, dan double, semua tipe data di Java adalah tipe referensi. Ini menimbulkan keanehan yang membingungkan.
Contoh paling gamblang adalah kelas Integer. Di balik layar, Java menyimpan cache untuk objek Integer dengan nilai di bawah 128. Akibatnya, membandingkan dua objek Integer yang nilainya kecil dengan operator == bisa menghasilkan true, tapi untuk nilai yang lebih besar, == selalu mengembalikan false meskipun nilainya identik. "Keanehan" ini membuat editor Java modern selalu memperingatkan pengembang untuk tidak menggunakan == pada objek Integer.
Kasus serupa terjadi pada LocalDate. Dua instance yang merepresentasikan tanggal yang sama tetap dianggap berbeda oleh operator == karena keduanya adalah objek terpisah di memori. Solusinya? Menggunakan metode equals() — sebuah langkah ekstra yang seharusnya tidak diperlukan.
JEP 401 memperkenalkan "value objects" — instance kelas yang tidak memiliki identitas objek dan hanya dibedakan oleh nilai dari field-nya. Ini memberi kebebasan kepada Java Virtual Machine (JVM) untuk menyimpan objek-objek ini dengan cara yang paling efisien, baik di stack maupun di register prosesor, tanpa harus melalui proses dereferensi yang memakan waktu.
Oracle Language Architect Brian Goetz menjelaskan bahwa ini baru "bagian pertama dari Valhalla." Ia memprediksi bahwa bahkan setelah pratinjau ini dirilis, kritikus akan segera bergeser dari "mereka tidak akan pernah merilisnya" menjadi "mereka belum merilis bagian yang paling penting."
Goetz mengakui bahwa Valhalla akan membawa perubahan yang sengaja memecah kompatibilitas (breaking changes). Contoh nyata: "kode yang melakukan sinkronisasi pada objek Integer kini akan gagal dengan exception." Ini adalah konsekuensi dari penghapusan identitas objek — Anda tidak bisa mengunci sesuatu yang tidak memiliki identitas unik.
Untuk langkah selanjutnya, Goetz mengisyaratkan bahwa Java perlu mengatasi dua tantangan lain: nullitas dan atomicity-safety-under-race (ASUR). "Banyak bahasa lain telah atau sedang mengerjakan cara untuk sampai ke sana, seperti structs di C#," ujarnya. "Tantangan utamanya adalah bagaimana mengemasnya dalam model pengguna agar tidak bertentangan dengan prasangka kita sendiri tentang integritas dan enkapsulasi objek."
Goetz memberikan peringatan realistis: JEP 401 kemungkinan besar masih akan berstatus pratinjau di rilis LTS berikutnya (JDK 29, September 2027). "Berharap fitur ini keluar dari pratinjau untuk JDK 29 sepertinya... optimistis," katanya. Ia juga menambahkan bahwa Vector API baru bisa keluar dari tahap inkubasi ketika basisnya diubah pada primitif VM dari Valhalla. "Jangan berharap jendela pratinjau yang lebih pendek dari biasanya."