Java 24 

Java 24 is a non-LTS feature release following Java 23. It preceded Java 25 LTS (September 2025). Java 24 reached end-of-life in September 2025 and receives no further updates. 

Java 24 Release Details 

Release DateMarch 18, 2025
LTSNo
OpenJDK End-of-LifeSeptember 16, 2025
Class File Version68.0
Unicode Version16.0.0
Notable ForStream gatherers finalized, class-file API finalized, quantum-resistant cryptography, AOT class loading 

Java 24 is end-of-life. Organizations running it should upgrade to Java 25 LTS (current). 

Java 24 Language Features 

Primitive Types in Patterns (Second Preview, JEP 488) 

Second preview with refinements. Extends pattern matching to primitive types in instanceof and switch. Enables type-safe handling of primitive values without boxing. 

Simple Source Files and Instance Main Methods (Fourth Preview, JEP 495) 

Fourth preview of simplified entry-point declarations. Renamed from “Implicitly Declared Classes.” Beginners can write void main() { println(“Hello”); } without class boilerplate, public static, or String[] args. 

Module Import Declarations (Second Preview, JEP 494) 

Second preview. Import entire modules with import module java.base to access all exported packages without individual imports. 

Flexible Constructor Bodies (Second Preview, JEP 492) 

Second preview. Allows arbitrary statements before explicit super() calls in constructors. 

Java 24 API Changes 

Stream Gatherers (JEP 485) 

Finalized. Custom intermediate operations for streams. Fills gaps in the Stream API for operations like fixed-window batching, prefix scanning, and custom folding. Previewed in Java 22-23. 

List<List<String>> batches = words.stream() 

    .gather(Gatherers.windowFixed(3)) 

    .toList(); 

Class-File API (JEP 484) 

Finalized. Standard API for parsing, generating, and transforming Java class files. Replaces third-party bytecode manipulation libraries (ASM, Byte Buddy) for JDK-internal use and build tool integration. Previewed in Java 22-23. 

Quantum-Resistant Cryptography (JEP 496, JEP 497) 

Adds two post-quantum cryptographic algorithms from the NIST standardization process: 

  • ML-KEM (Module-Lattice-Based Key Encapsulation Mechanism, JEP 496): Replacement for key exchange algorithms vulnerable to quantum computing attacks 
  • ML-DSA (Module-Lattice-Based Digital Signature Algorithm, JEP 497): Replacement for digital signature algorithms vulnerable to quantum computing attacks 

Key Derivation Function API (Preview, JEP 478) 

First preview of a standard KDF API in javax.crypto. Enables derivation of cryptographic keys from shared secrets using algorithms like HKDF. 

Permanently Disable the Security Manager (JEP 486) 

The Security Manager is now permanently disabled and cannot be re-enabled. Deprecated for removal in Java 17. Applications must migrate to platform-level security mechanisms (OS permissions, container security policies). 

Prepare to Restrict the Use of JNI (JEP 472) 

Issues warnings when JNI or the Foreign Function and Memory API is used without explicit opt-in. Applications must declare –enable-native-access for modules that use native code. 

Scoped Values (Fourth Preview, JEP 487) and Structured Concurrency (Fourth Preview, JEP 499) 

Both continue previewing. Scoped Values provide immutable thread-local data sharing. Structured Concurrency treats concurrent tasks as atomic units. 

Vector API (Ninth Incubator, JEP 489) 

Ninth incubation. SIMD vector computations for x86 (AVX) and ARM (NEON/SVE). Still incubating as of Java 26 (JEP 529, tenth incubator). 

Java 24 JVM Changes 

Ahead-of-Time Class Loading and Linking (JEP 483) 

Enables pre-loading and linking of classes at build time. Reduces startup time by loading a pre-computed class metadata archive instead of parsing class files at runtime. Targeted at short-lived JVM processes (CLI tools, serverless functions). 

Synchronize Virtual Threads without Pinning (JEP 491) 

Fixes virtual thread pinning in synchronized blocks and native methods. Previously, a virtual thread entering a synchronized block or native frame would pin its carrier platform thread, preventing other virtual threads from using it. Now the carrier is released. 

ZGC: Remove the Non-Generational Mode (JEP 490) 

Non-generational ZGC is removed. Generational ZGC has been the default since Java 23 (JEP 474). 

Java 24 Removals and Deprecations

WhatJEPStatue
Windows 32-bit x86 port JEP 479 Removed
32-bit x86 port (all platforms) JEP 501Deprecated for removal 
sun.misc.Unsafe memory-access methods JEP 498Warning issued on use 
Non-generational ZGC JEP 490Removed 
Security Manager JEP 486Permanently disabled 

Java 24 Tools 

Linking Run-Time Images without JMODs (JEP 493) 

jlink no longer requires JMOD files. Custom runtime images can be created directly from modular JARs, simplifying build pipelines. 

Java 24 Upgrade Path 

Java 24 has been end-of-life since September 2025. Recommended upgrade target: 

  • Java 25 LTS: Current LTS. The direct successor. Finalizes features previewed in Java 24 (compact source files, scoped values) and adds compact object headers. 

Java 24 applications should upgrade directly to Java 25 LTS. 

Azul’s Java 24 Support 

Azul Platform Core provides TCK-certified builds of current LTS releases with extended support. A single subscription covers all supported versions from Java 6 through Java 26. 

Platform Core wide 1x

Contact Us

Contact us to learn more about our migration services, support, modernization services, and more!