No matter the size of your company, Azul offers competitive pricing options to fit your needs, your budget, and your ambition.
No matter the size of your company, Azul offers competitive pricing options to fit your needs, your budget, and your ambition.
Java 25 is the fifth long-term support release under the six-month release cadence. It followed Java 24 and preceded Java 26 (March 2026, non-LTS). Java 25 is the current LTS release, succeeding Java 21.
| Release Date | September 16, 2025 |
| LTS | Yes (current) |
| OpenJDK End-of-Life | September 2030 |
| Class File Version | 69.0 |
| Umbrella JSR | JSR 400 |
| Unicode Versionv | 16.0.0 |
| Minimum Supported Versions | Azul Zulu: 11, 17, 21, 25 |
Compact Source Files and Instance Main Methods (JEP 512)
Finalizes the preview from Java 21 (JEP 445) and Java 22-24. Entry-point methods no longer need public static void main(String[] args). A simple void main() suffices. Source files can omit the enclosing class declaration for scripts and small programs.
void main() {
println(“Hello, Java 25”);
}
Module Import Declarations (JEP 511)
import module java.base imports all public top-level classes and interfaces from every package in the module. Eliminates the need for individual package imports when writing quick scripts or learning the platform.
Flexible Constructor Bodies (JEP 513)
Constructor bodies can now initialize fields before calling super(). Previously, any statement before an explicit super() call was prohibited. This removes a long-standing friction point when working with validated constructor arguments passed to superclass constructors.
Primitive Types in Patterns (Preview, JEP 507)
Third preview. Extends pattern matching to primitive types, allowing instanceof and switch to match int, double, long, and other primitives directly.
Scoped Values (JEP 506)
Finalized after previewing in Java 20-24. Provides immutable, inheritable data sharing across virtual threads. Replaces ThreadLocal for use cases where the value is set once and read many times within a bounded scope. Eliminates the memory leak risk of ThreadLocal in virtual thread workloads.
Key Derivation Function API (JEP 510)
A standard API for key derivation functions (KDFs) such as HKDF and PBKDF2. KDFs derive cryptographic keys from shared secrets or passwords using a hash function or HMAC. Complements the Key Encapsulation Mechanism API introduced in Java 21 (JEP 452).
Stable Values (Preview, JEP 502)
An API for lazily computed, immutable values that are computed at most once and safe for concurrent access. Positioned between final fields (eager) and AtomicReference (mutable). Suited to caches and configuration values in virtual thread workloads.
Structured Concurrency (Preview, JEP 505)
Fifth preview (Java 19-25). An API for managing multiple concurrent tasks as a single unit of work. All subtasks share a lifecycle: if one fails, the rest are cancelled. Intended to replace ad-hoc ExecutorService usage in request-handling code.
Ahead-of-Time Method Profiling (JEP 515)
The JVM ships with pre-computed profiling data for common application patterns. The JIT compiler uses this data on first launch, reducing the warmup period before peak throughput. Previously, the JIT had to collect profiling data from scratch on every startup.
Ahead-of-Time Command-Line Ergonomics (JEP 514)
The JVM selects garbage collector and heap configuration based on container resource limits (cgroups) and available memory. Reduces the need for manual -Xmx, -XX:+UseG1GC, and similar flags in containerized deployments.
Compact Object Headers (JEP 519)
Reduces the per-object overhead in the JVM from 12-16 bytes to 8 bytes on 64-bit systems. For applications with many small objects (common in OLTP workloads), this translates to measurable heap savings and reduced GC pressure.
Generational Shenandoah (JEP 521)
Shenandoah GC now supports generational mode, separating young and old generations. Joins Generational ZGC (JEP 439, Java 21) in offering generational collection for low-pause workloads.
JFR Method Timing and Tracing (JEP 520)
JDK Flight Recorder can now emit per-method timing and tracing events without manual jfr configuration. Provides production-safe profiling overhead comparable to async-profiler.
JFR Cooperative Sampling (JEP 518)
Replaces the operating system signal-based sampling in JFR with cooperative JVM-internal sampling. Eliminates the accuracy trade-offs and signal-handler overhead of OS-based sampling.
| JEP | Change | Impact |
|---|---|---|
| JEP 503 | Remove the 32-bit x86 Port | 32-bit x86 is no longer a supported platform. Windows 32-bit was removed in Java 24 (JEP 479). |
| JEP | Feature | Notes |
|---|---|---|
| JEP 507 | Primitive Types in Patterns | Third Preview |
| JEP 502 | Stable Values | First Preview |
| JEP 505 | Structured Concurrency | Fifth Preview |
| JEP 470 | PEM Encodings of Cryptographic Objects | First Preview |
| JEP 508 | Vector API | Tenth Incubator |
Java 25 is the recommended upgrade for organizations on Java 21 LTS. Migration considerations:
Contact us to learn more about our migration services, support, modernization services, and more!
Azul Platform Core provides TCK-certified builds of OpenJDK 25 with extended support beyond the OpenJDK end-of-life date. Features include: