7 poin oleh GN⁺ 2025-03-19 | 4 komentar | Bagikan ke WhatsApp
  • Oracle secara resmi mengumumkan perilisan Java 24 (JDK 24)
  • JDK 24 adalah implementasi referensi Java SE Platform versi 24 yang ditetapkan dalam JSR 399 milik JCP, dan dirilis melalui JDK Release Process (JEP 3)

[Ringkasan per JEP]

  • JEP 404: Generational Shenandoah (eksperimental)

    • Mendukung collection berbasis generasi pada Shenandoah GC untuk meningkatkan performa
  • JEP 450: Compact Object Headers (eksperimental)

    • Mengurangi ukuran object header di HotSpot JVM dari 96~128 bit menjadi 64 bit
    • Diharapkan mengurangi ukuran heap, meningkatkan densitas deployment, dan memperbaiki data locality
  • JEP 472: Prepare to Restrict the Use of JNI

    • Menambahkan peringatan saat menggunakan JNI (Java Native Interface)
    • Memberikan peringatan yang konsisten di API Foreign Function & Memory (FFM)
    • Menyediakan peringatan sebagai persiapan pembatasan penggunaan JNI dan API FFM di masa mendatang
    • Jika diperlukan, aplikasi dapat mengaktifkan interface tersebut secara opsional
  • JEP 475: Late Barrier Expansion for G1

    • Menyederhanakan implementasi barrier pada garbage collector G1
    • Menggeser waktu ekspansi barrier di compiler C2 JIT dari tahap awal ke tahap akhir
  • JEP 478: Key Derivation Function API (preview)

    • Memperkenalkan API Key Derivation Function (KDF) untuk fungsi derivasi kunci kriptografi
    • Memungkinkan derivasi kunci tambahan dari secret key dan data lainnya
  • JEP 483: Ahead-of-Time Class Loading & Linking

    • Membuat class aplikasi langsung siap digunakan saat startup HotSpot JVM
    • Status load dan link yang sudah dilakukan pada satu eksekusi dapat disimpan di cache untuk startup lebih cepat pada eksekusi berikutnya
  • JEP 484: Class-File API

    • Menyediakan API standar untuk parsing, pembuatan, dan transformasi file class Java
  • JEP 485: Stream Gatherers

    • Menambahkan dukungan operasi intermediate kustom ke Stream API
    • Memungkinkan transformasi data yang sulit dilakukan dengan operasi intermediate yang ada saat ini
  • JEP 486: Permanently Disable the Security Manager

    • Security Manager bukan lagi sarana keamanan utama untuk kode sisi klien
    • Dinonaktifkan setelah ditetapkan untuk dihapus di Java 17 (JEP 411)
    • API Security Manager dijadwalkan akan dihapus sepenuhnya pada rilis mendatang
  • JEP 487: Scoped Values (preview keempat)

    • Memperkenalkan Scoped Values untuk berbagi data immutable di dalam thread dengan child thread
    • Dapat mengurangi biaya memori dan waktu dibanding variabel thread-local
    • Diharapkan meningkatkan performa saat digunakan bersama virtual thread dan structured concurrency
  • JEP 488: Primitive Types in Patterns, instanceof, and switch (preview kedua)

    • Menambahkan dukungan tipe primitif dalam pattern matching
    • Memungkinkan penggunaan semua tipe primitif dalam instanceof dan switch
  • JEP 489: Vector API (inkubator kesembilan)

    • Memperkenalkan API untuk operasi vektor
    • Diharapkan meningkatkan performa karena dikompilasi menjadi instruksi vektor, bukan operasi skalar
  • JEP 490: ZGC: Remove the Non-Generational Mode

    • Menghapus mode non-generational pada ZGC dan menjadikan mode generational sebagai default
  • JEP 491: Synchronize Virtual Threads without Pinning

    • Meningkatkan perilaku pada sintaks synchronized agar virtual thread dapat melepaskan platform thread
    • Meningkatkan performa dan skalabilitas dengan mencegah virtual thread terikat pada platform thread
  • JEP 492: Flexible Constructor Bodies (preview ketiga)

    • Mengizinkan statement sebelum pemanggilan constructor eksplisit (super(..), this(..))
    • Memungkinkan inisialisasi field sebelum instance selesai diinisialisasi sepenuhnya
  • JEP 494: Module Import Declarations (preview kedua)

    • Menambahkan deklarasi untuk mengimpor package yang diekspor modul secara lebih sederhana
    • Menyederhanakan reuse library yang dimodularisasi
  • JEP 495: Simple Source Files and Instance Main Methods (preview keempat)

    • Mendukung source file dan method sederhana yang mudah ditulis oleh pemula
    • Memungkinkan penulisan program sederhana tanpa kode yang kompleks
  • JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism

    • Memperkenalkan Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM)
    • Memperkuat keamanan kunci simetris dan bersiap menghadapi serangan komputasi kuantum
  • JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm

    • Memperkenalkan Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm (ML-DSA)
    • Memperkuat pencegahan pemalsuan/perubahan data dan autentikasi penanda tangan
    • Ditujukan untuk menghadapi serangan komputasi kuantum di masa depan
  • JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe

    • Memberikan peringatan saat method akses memori di sun.misc.Unsafe digunakan
    • Menganjurkan migrasi ke VarHandle API dan FFM API
  • JEP 499: Structured Concurrency (preview keempat)

    • Memperkenalkan structured concurrency untuk menangani kelompok tugas terkait sebagai satu unit kerja
    • Menyederhanakan penanganan error dan pembatalan, serta meningkatkan keandalan dan visibilitas

[Ringkasan fitur baru JDK 24]

  • Configurable New Session Tickets Count for TLSv1.3

    • Menambahkan system property baru jdk.tls.server.newSessionTicket
    • Server JSSE dapat mengatur jumlah tiket resume TLSv1.3 (rentang 0~10)
    • Nilai default diatur ke 1
    • Contoh perintah:
      java -Djdk.tls.server.newSessionTicket=2  
      
  • Mechanism to Disable TLS Cipher Suites by Pattern Matching

    • Dari file konfigurasi java.security, cipher suite TLS dapat dinonaktifkan melalui properti jdk.tls.disabledAlgorithms
    • Mendukung pattern matching (wildcard _ dapat digunakan)
    • Contoh: "TLS_RSA_*" menonaktifkan semua cipher suite yang diawali TLS_RSA
  • New Option to Extract a JAR File to a Specific Directory Using the jar Tool

    • Menambahkan opsi baru --dir dan -C ke tool jar
    • Memungkinkan ekstraksi isi file JAR ke direktori tertentu
    • Contoh:
      jar -xf foo.jar -C /tmp/bar/  
      jar --extract --file foo.jar --dir /tmp/bar/  
      
  • New Reader.of(CharSequence) Method

    • Menambahkan method factory statis baru java.io.Reader.of(CharSequence)
    • Mendukung pembacaan yang efisien dari String, StringBuilder, dan lainnya
  • New Method Process.waitFor(Duration)

    • Menambahkan method java.lang.Process#waitFor(Duration)
    • Mencegah kebingungan dalam penetapan satuan pada waitFor() yang lama
  • Support for Unicode 16.0

    • Menambahkan dukungan untuk Unicode 16.0
    • Total 154.998 karakter dan 7 skrip baru ditambahkan
      • Garay (Afrika Barat)
      • Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (India dan Nepal)
      • Todhri (Albania)
      • Tulu-Tigalari (India barat daya)
  • New JAR Command Option to Not Overwrite Existing Files

    • Menambahkan opsi --keep-old-files dan -k ke tool jar
    • Mencegah penimpaan file yang sudah ada
    • Contoh:
      jar xkf foo.jar  
      jar --extract --keep-old-files --file foo.jar  
      
  • New MXBean to Monitor and Manage Virtual Thread Scheduler

    • Menambahkan interface jdk.management.VirtualThreadSchedulerMXBean
    • Memungkinkan pemantauan status dan paralelisme scheduler virtual thread
    • Memungkinkan perubahan target paralelisme scheduler secara dinamis
  • New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers

    • Menambahkan perintah baru ke tool jcmd
      • Thread.vthread_scheduler: menampilkan status thread scheduler
      • Thread.vthread_pollers: menampilkan status I/O poller
  • Support for Including Security Properties Files

    • File konfigurasi java.security kini dapat menyertakan file properti lain
    • Menggunakan include <jalur file>
    • Kata kunci include tidak dapat digunakan sebagai nama properti
  • Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature

    • Mendokumentasikan hash standar dan message generation function yang dapat digunakan pada tanda tangan RSASSA-PSS
  • SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism

    • Menambahkan dukungan transformasi AES/CTS pada provider SunPKCS11
    • Menambahkan properti konfigurasi baru cipherTextStealingVariant (CS1, CS2, CS3)
    • Untuk NSS, nilai default diatur ke CS1
  • New Summary Page for External Specifications

    • Menambahkan halaman ringkasan untuk melihat sekilas spesifikasi eksternal yang dirujuk oleh Java SE dan JDK API
  • jpackage Supports WiX Toolset v4 and v5 on Windows

    • jpackage menambahkan dukungan untuk WiX Toolset v4 dan v5
    • Secara otomatis memilih versi installer terbaru
    • Mengonversi source kustom format WiX v3 ke format v4 secara otomatis
  • Add W3C DTDs and XSDs to the JDK Built-in Catalog

    • Menambahkan DTD dan XSD W3C ke katalog XML bawaan JDK
    • Dapat dimuat secara lokal tanpa jaringan
    • Item yang ditambahkan:
      • namespace xml
      • XML Schema Part 1 & 2
      • XHTML 1.0 & 1.1
      • DTD spesifikasi XML W3C

4 komentar

 
clickin 2025-03-20

Project Valhalla sudah dikembangkan sangat lama, jadi semoga bisa membuahkan hasil yang baik.
Secara pribadi, saya berharap struktur flat dari value class dapat mengurangi referensi pointer sehingga memberi keuntungan pada kecepatan akses memori.

 
tsboard 2025-03-20

Sepertinya banyak menerima pengaruh (positif) dari Kotlin. Akhir-akhir ini saya sangat puas menggunakan bahasa Kotlin, tetapi saya juga mendukung Java yang bisa dibilang sebagai asal mulanya.

 
carnoxen 2025-03-19

Saya sangat menantikan Structured Concurrency dan Scoped Value.

 
GN⁺ 2025-03-19
Pendapat Hacker News
  • SecurityManager diam-diam menghilang. Dulu ada profesor yang mengajar mata kuliah pilihan Java dan sering menekankan kelebihan SecurityManager. Saat itu saya sangat skeptis, dan sekarang rasanya memuaskan karena skeptisisme itu terbukti benar

  • Ingin pratinjau structured concurrency segera selesai. Ini membantu Java menutup kesenjangan terakhir dibanding golang dalam kemudahan pemrograman konkurensi. Go memudahkan pembuatan channel dan wait group. Structured concurrency menggunakan elemen-elemen dasar ini agar tugas tingkat lebih tinggi lebih mudah ditulis dan dipahami

  • Tidak adanya pinning virtual thread adalah keunggulan besar. Sekarang virtual thread bisa digunakan hampir tanpa batasan

  • Senang melihat Streams masih tetap disukai. Di perusahaan, kami sering melakukan wawancara gaya fizzbuzz, dan orang yang memilih Java lalu menggunakan stream biasanya lolos. Ini menunjukkan ergonomi dan intuitivitas bahasa tersebut, serta kekuatan abstraksi. Java stream sama kuatnya dengan rantai operasi gaya fungsional di Ruby, tetapi performanya benar-benar bagus

  • Fitur baru: tautan proyek OpenJDK 24

  • Rilis ARM32 dan Risc-V akan segera tersedia di sini

  • Raspberry 2 dan Vision Five 2 adalah perangkat keras yang sangat visioner yang diabaikan oleh Oracle dan OpenJDK

  • Pertanyaan tentang perbedaan lisensi antara penggunaan OpenJDK dan rilis resmi Oracle JDK

  • Mengejutkan JEP 491 belum disebutkan. Ini memastikan kata kunci "synchronized" tidak merusak virtual thread. Ini keuntungan besar untuk menjalankan kode lama di virtual thread

  • Perkembangan versi Java dalam beberapa tahun terakhir cukup menarik. Setelah Java 9, 10, dan 11 LTS, saya masih memakai Java 8. Terlalu banyak yang harus dikerjakan

  • Saat membandingkan Java versi terbaru dengan Kotlin, Java terus membaik dan mengambil fitur-fitur Kotlin, tetapi Kotlin juga terus berkembang dengan caranya sendiri

  • GraalVM juga bisa digunakan untuk Java 24. Ada banyak fitur bagus

  • Pinning pada virtual thread akhirnya hilang