JDK 27’s first release candidate arrives August 6. General availability follows September 15. This is a non-LTS release with nine JEPs, and most of them are still in preview — but three land as automatic changes on every JVM that upgrades: G1 becomes the default garbage collector, TLS 1.3 handshakes gain post-quantum hybrid key exchange, and object headers shrink by a third. You get all three without touching a line of code.
G1 Is Finally the Default GC
JEP 523 makes G1 the default garbage collector across all environments. That sounds administrative. It is not. The JVM has shipped G1 since Java 9 and recommended it for most workloads, but Parallel GC remained the default on machines with fewer CPUs and smaller heap sizes — and Serial GC on the smallest configurations. JDK 27 ends that split.
The change became possible because JDK 26 closed the throughput gap. JEP 522 brought G1’s memory synchronization overhead down to near-Parallel levels. With that baseline in place, making G1 universal was no longer a performance trade-off — it’s a simplification.
The benchmarks back it up. SPECjbb2015 with the G1 default uses 22% less heap, requires 8% less CPU time, and generates 15% fewer garbage collection events compared to prior defaults. A highly parallel JSON parser benchmark runs 10% faster. Amazon has been running compact object headers in production across hundreds of services using backports to JDK 17 and 21, so the production evidence base exists.
If you’re already passing -XX:+UseG1GC explicitly, nothing changes. If you’re running default JVM configuration in a memory-constrained container, test your application with JDK 27 early-access builds before September 15. G1 handles memory differently than Parallel; your footprint may shift. The prior defaults remain available: -XX:+UseParallelGC or -XX:+UseSerialGC still work.
Post-Quantum TLS Without Asking
JEP 527 adds hybrid post-quantum key exchange to TLS 1.3 — the kind of change that makes security audits easier without requiring a single code change from application developers.
The JDK’s TLS stack now advertises X25519MLKEM768 as the first preferred named group during handshakes. This combines classical elliptic-curve key exchange (X25519) with ML-KEM-768, the Module Lattice-based Key Encapsulation Mechanism standardized by NIST as FIPS 203. Two additional hybrid schemes are available: SecP256r1MLKEM768 and SecP384r1MLKEM1024. If the remote peer does not support hybrid groups, the TLS stack falls back to standard curves — backward compatible, no broken connections.
This is a direct response to harvest-now-decrypt-later attacks: adversaries collecting encrypted traffic today and storing it for decryption by future quantum systems. Java services using the standard javax.net.ssl API gain quantum-resistant handshakes automatically. The only teams with action items are those explicitly managing named groups via jdk.tls.namedGroups or SSLParameters::setNamedGroups — review your lists to ensure the new hybrid groups are not inadvertently excluded.
Compact Object Headers Default: Free Heap
JEP 534 makes compact object headers the default on 64-bit JVMs. Headers shrink from 96 bits to 64 bits. The practical result: 22% less heap footprint in production workloads, more objects fit in the same RAM, and GC pressure falls accordingly.
This feature progressed from experimental (JDK 24) to product feature (JDK 25) to the new default in JDK 27. The path was careful because one category of code can break: applications that rely on specific object header layouts via Unsafe. This covers some native library integrations and older Java agents. Test before deploying JDK 27 to production if your stack includes native instrumentation.
Structured Concurrency’s Seventh Preview
Five of the nine JEPs are previews or incubators. Structured concurrency (JEP 533) enters its seventh preview with the most usable API yet: StructuredTaskScope now carries a third type parameter for the exception type that join() can declare, and new overloads let you map subtask failures to domain exceptions instead of raw ExecutionException. This is the fork-join concurrency model Java should have had a decade ago — subtask lifetimes scoped to the parent, cancellation propagated reliably, thread hierarchies surfaced in observability tools.
Seven previews is a long runway. The API is mature enough to build on; the finalization is blocked on Virtual Threads ecosystem maturity and feedback collection. Expect JDK 28 or 29 to land it as a product feature.
Primitive types in patterns (JEP 532, fifth preview) continues to expand: all primitive types — including long, float, double, and boolean — are now valid switch selector types and pattern match targets. This removes the last type-system inconsistency in Java’s pattern matching. JFR In-Process Data Redaction (JEP 536) needs no code changes: Flight Recorder now strips command-line arguments, environment variables, and system properties from recordings before data leaves the process.
How to Test Before September 15
Early-access builds for JDK 27 are available at jdk.java.net/27. Download, run your application’s test suite, and check three things: heap behavior under G1 in containers, JFR recordings for redaction behavior, and whether any native agents break on compact object headers. Preview features require --enable-preview at compile and runtime.
JDK 27 is not a landmark release. What it has is three zero-code-change improvements that make every Java deployment more efficient and more secure on September 15 without a migration project. For a non-LTS cycle, that’s a reasonable return.













