Java 27 Features Explained: All 9 JEPs in the New Release
Java 27 has been officially launched for the public on September 15, 2026. This is a short-term support, non-LTS release that delivers 9 JDK Enhancement Proposals (JEPs). Here we discuss these nine JEPs and the changes they brought. We also shed some light on some non-JEP changes delivered by this release.
Java 27 at a Glance
| Detail | Value |
| General availability | September 15, 2026 |
| Release type | Short-Term Support (non-LTS) |
| Predecessor | Java 26 (March 2026) |
| Current LTS release | Java 25 (unaffected — no migration pressure from Java 27) |
| Next LTS release | Java 29 (expected 2028) |
| Total JEPs delivered | 9 (4 final, 4 preview, 1 incubator) |
| Feature release number | 18th, delivered on the standard six-month cadence |
Java 27 is short-term supported non-LTS version of the Java Programming language released on September 15, 2026. It comes with many features and enhancements that we are going to discus in this post.

3 Changes Automatically Affecting
Before we walk you through all 9 JEPs, let’s discuss 3 crucial changes that affect Java developers without any action. You neither need to opt in to enable-preview, nor do you need any configuration changes.
- From the Java 27 update, G1 is the default garbage collector across all environments (JEP 523). Now the G1 garbage collector applies to even small container applications and low-memory systems for which Serial GC was the default option.
- Java 27 has also made compact object headers the default (JEP 534). The compact observed header feature started as an opt-in feature in Java 25 and now became a default one in Java 27.
- Java 27 release also ruled that Java Flight Recorder (JFR) will redact sensitive data automatically (JEP 536). Java Flight Recorder removes sensitive data like passwords from recordings automatically.
Now let’s discuss all 9 JEPs delivered by Java 27.
JEP 523: G1 Became the Default Garbage Collector in All Environments
Although since Java 9, G1 has been the default garbage collector, in certain environments with CPU or memory constraints, the Java Virtual Machine automatically uses Serial GC. Now, G1, after passing through years of sustained improvements, has become capable to hande low-memory environments. JEP 523 in Java 27 changed the earlier rule, and G1 now became the default collector for all environments, irrespective of resource constraints.
JEP 534: Making Compact Object Headers Default
Compact Object Headers were added to Java 25 as an opt-in feature. Now, from Java 27, it has become a default feature. From Java 27, the header metadata of every object is reduced from roughly 96 bits to 64 bits when the system supports 64-bit architecture. This results in lower heap usage and reduced garbage collection pressure.
JEP 527: Post-Quantum Hybrid Key Exchange for TLS 1.3
This is the biggest security feature update from the Java 27 release. JEP 527 incorporates ML-KEM (Module-Lattice Key Encapsulation Mechanism) key exchange right inside TLS 1.3. It follows the NIST FIPS 203 standard and doesn’t need to configure provider-specific security settings or any third-party cryptography library. The feature is to prevent future security threats having "harvest now, decrypt later" attack objectives.
JEP 536: Sensitive Data Redaction from JFR Recordings
From Java 27, Java Flight Recorder (JFR) profiling and diagnostics tool will remove sensitive data like passwords automatically from recordings. Security threats can no longer catch sensitive credentials from diagnostic recordings.
JEP 531: Lazy Constants
This JDK feature, after several name changes such as Computed Constants and StableValue, became known as LazyConstant since JEP 526 of Java 26, and JEP 531 of Java 27. The core idea behind this feature is to lazily compute a value only once in a thread-safe way, but allowing the JVM to treat it as a true constant later. The feature makes optimizations easier while entirely avoiding the cost of synchronization.
JEP 532: Primitive Types in Patterns, instanceof, and switch
JEP 532 is now in its 5th preview round with the Java 27 release. The objective of this JEP is to extend Java's pattern matching ability so that developers can work directly with primitive types. This record pattern feature lets switch expressions and instanceof sync with values like int and double without manual boxing intervention.
JEP 533: Structured Concurrency
Structured Concurrency as a preview feature has been reintroduced for the 7th time now. Java 27 introduced a major breaking change in Structured Concurrency from the earlier preview round, rather than adding anything new. All the joiners like allSuccessfulOrThrow(), anySuccessfulOrThrow(), and awaitAllSuccessfulOrThrow() that were introduced in Java 26 to raise a preview-only FailedException for any subtask failure now provide ExecutionException instead in Java 27. The authors of this preview version focused more on refining type-safety than delivering a structural redesign.
JEP 538: PEM Encodings of Cryptographic Objects
Introduced in Java 25, this JEP has entered its 3rd preview with Java 27. It offers a standard encryption and decryption API for encrypted keys and certificates. Generally, Java developers rely on third-party API libraries for this functionality.
JEP 537: Vector API
The Vector API is the only incubator feature in the Java 27 release. Reaching the 12th incubation round, the feature remained almost the same, with no implementation changes from the previous Java 26 release. It is kept in incubation through subsequent releases because Project Valhalla's value class features are awaited to become available. Optimizing CPU vector instructions is the key promise of this JEP.
Non-JEP Enhancements Worth Knowing
Apart from the above-mentioned 9 JEPs, Java 27 brings several smaller improvements. Some of these improvements include refined G1 heap sizes, enhancement of the C2 compiler, Vector API optimization, efficiency boost for file and native I/O operations, cryptographic performance improvements for ML-KEM, ML-DSA, X25519, and Ed25519 protocols, and a new jcmd VM.security_properties command for seeing active security properties on a runtime JVM.
Should You Upgrade to Java 27?
As a short-term support release, there’s no immediate compulsion to upgrade to Java 27. But there’s no risk as well. As it is a short-term release, support for Java 25 continues. Some development teams having specific objectives like boosting object headers' memory savings or urgent post-quantum TLS support can benefit from the Java 27 upgrade. Some teams that want to test features like Structured Concurrency, Lazy Constants, or primitive pattern matching can also upgrade.
Final Thoughts
Some Java 27 feature updates can improve memory efficiency and security, while there are several preview round features that you can try before they are stabilized. As a short-term support release, it brings you a balanced package of immediate enhancements plus future-focused feature upgrades.
Related: