aliteq.

JDK 27 is out: should you upgrade, and which of the 9 JEPs matter

Java 27 shipped on 15 September 2026 with three default changes and four finished features. It is a six-month release, so the real question is whether to move from Java 25 now or wait for the next long-term one.

KernelUpdated 1d ago8 min readWeb story
Hand-drawn editorial illustration of a tall stone pillar beside a small wooden footbridge leading to a distant doorway, with one coral lantern
Share

Every September the question comes back: do we move? I read the OpenJDK page and all nine JEPs on 3 October 2026 so you don't have to. I haven't installed or benchmarked JDK 27, so everything below comes from the JEPs and Oracle's published roadmap. Where a number appears, it is the JEP authors' number.

Hand-drawn editorial illustration of a tall stone pillar beside a small wooden footbridge leading to a distant doorway, with one coral lantern
One long-term release to stand on, and short bridges between them. · Illustration generated with Higgsfield

Is JDK 27 released, and is it an LTS?

JDK 27 is released and it is not an LTS. The OpenJDK page says it "reached General Availability on 15 September 2026." Oracle's roadmap lists Java 8, 11, 17, 21 and 25 as LTS releases and Java 29 as the next planned one, in September 2027.

That makes 27 a six-month release. Oracle's policy calls non-LTS releases "a cumulative set of implementation enhancements of the most recent LTS release," and says a previous non-LTS release is superseded when the next feature release ships. In practice, Java 27 stops getting updates when Java 28 arrives in March 2027.

Timeline of Oracle Java support. Java 25 LTS from September 2025, Premier Support to September 2030 and Extended to September 2033. Java 27 non-LTS from September 2026, Premier Support to March 2027, no Extended Support. Java 28 non-LTS from March 2027 to September 2027. Java 29 LTS planned September 2027, Premier to September 2032 and Extended to September 2035.
Oracle's published support dates for Java 25, 27, 28 and 29. The 27, 28 and 29 rows are marked subject to change. · aliteq research

Which JEPs matter, and which can wait?

Four of the nine JEPs are finished features that change behaviour in production: G1 as the default collector, compact object headers, post-quantum TLS and JFR redaction. The other five are previews or an incubator. You have to opt in to those, so they can wait unless you are the kind of team that tries new APIs early.

Table of the nine JEPs in JDK 27. Features on by default: JEP 523 G1 as default collector, 534 compact object headers, 527 post-quantum TLS 1.3 hybrid key exchange; JEP 536 JFR redaction is also a finished feature.
The nine JEPs in JDK 27, split by whether they are finished, preview or incubating. · aliteq research

JDK 27 JEPs at a glance (read 3 Oct 2026)

523 G1 as default collector

Status in 27
Feature
Who it affects
Everyone who never set a collector

534 Compact object headers

Status in 27
Feature
Who it affects
Memory and GC-heavy services

527 Post-quantum TLS 1.3

Status in 27
Feature
Who it affects
Anyone using javax.net.ssl

536 JFR data redaction

Status in 27
Feature
Who it affects
Teams that share JFR recordings

533 Structured concurrency

Status in 27
Seventh preview
Who it affects
Teams on virtual threads

532 Primitive types in patterns

Status in 27
Fifth preview
Who it affects
Language early adopters

531 Lazy constants

Status in 27
Third preview
Who it affects
Startup-sensitive code

538 PEM encodings

Status in 27
Third preview
Who it affects
Code that parses keys and certificates

537 Vector API

Status in 27
Twelfth incubator
Who it affects
Numeric and SIMD work

What does the G1 default change?

JEP 523 makes G1 the default garbage collector in every environment. Before, the JVM picked Serial on machines with one CPU or under 1792 MB of memory. Now, if you set no collector on the command line, the JVM "will always select G1, regardless of the number of processors and the available physical memory."

This matters most for small containers. A service pinned to one CPU or a small memory limit used to get Serial silently. After upgrading it gets G1. The JEP says G1 has improved "across all metrics" and that Serial-selected cases should not "degrade significantly" in throughput, latency, memory footprint or startup. It also admits that "some applications in constrained environments will still perform best with Serial." If that is you, set the collector explicitly. An explicit choice always overrides the default.

What do compact object headers do?

JEP 534 turns compact object headers on by default. They shrink each object's header from 96 bits to 64 bits on 64-bit JVMs, which cuts heap use. The feature arrived in JDK 24 and became a product feature in JDK 25, so this is the step from "opt in" to "opt out."

The JEP cites its own experiments: 22% less heap and 8% less CPU time on SPECjbb2015 in one setting, 15% fewer garbage collections with G1 and Parallel, and a highly parallel JSON parser benchmark running in 10% less time. Those are the authors' figures. Your result depends on how many small objects your code allocates. To turn it off, run with -XX:-UseCompactObjectHeaders. The old layout is not removed, though the JEP says Oracle intends to deprecate it in a future release.

Compact object headers in JDK 27. Header shrinks from 96 bits to 64 bits on 64-bit JVMs. JEP 534 reports 22 percent less heap and 8 percent less CPU time on SPECjbb2015 in one setting, 15 percent fewer garbage collections with G1 and Parallel, and 10 percent less run time on a parallel JSON parser benchmark.
The figures JEP 534 cites. They are the JEP authors' experiments, not ours. · aliteq research

What is post-quantum TLS in Java 27?

JEP 527 adds hybrid key exchange to TLS 1.3. "Hybrid" means it combines a quantum-resistant algorithm (ML-KEM) with a classic elliptic-curve one, so the connection stays safe if either holds. The goal is to blunt "harvest now, decrypt later," where someone records encrypted traffic today and cracks it once quantum computers can.

It adds three schemes: X25519MLKEM768, SecP256r1MLKEM768 and SecP384r1MLKEM1024. Only X25519MLKEM768 is on by default, placed first in the client's preference list. Your code needs no change if it does not pick key exchange schemes itself. It only covers javax.net.ssl and TLS 1.3. The JEP names jdk.tls.namedGroups and SSLParameters::setNamedGroups as the ways to change the list. The risk to check is old middleboxes or servers that mishandle larger handshakes. I did not test that.

What is in the preview and incubator JEPs?

Five JEPs ask you to opt in, and four are previews. Structured concurrency is on its seventh preview round. Primitive types in patterns is on its fifth, "without change." Lazy constants is on its third, with Set.ofLazy(...) added and isInitialized and orElse removed. PEM encodings is on its third, with renames. The Vector API is on its twelfth incubator round.

Preview APIs can change or disappear between releases, so do not ship library code that depends on them. Structured concurrency is the one to watch if you use virtual threads. Its API changed again here: the scope types got a third type parameter, Joiner.awaitAll() was removed, and onTimeout() became timeout(). If you wrote against the JDK 25 or 26 preview, expect a compile fix.

JFR redaction: small, but it fixes a real leak

JEP 536 redacts command-line arguments and the starting values of environment variables and system properties in Flight Recorder files, "before it leaves the process." The JEP's motivation is that these appear verbatim today, so a recording shared for debugging can leak a password passed as a flag or a token in an environment variable. If your team attaches .jfr files to tickets, read the JEP for how to configure it. I did not read the setup details.

Should you upgrade from Java 25 to 27?

Most production teams on Java 25 should test 27 and stay on 25. Java 25 is LTS, Oracle lists its Premier Support to September 2030, and Java 27 is superseded in six months. Move to 27 only if you want the new defaults now and can take a new release every six months.

Use the same build and test suite you use on Java 25. Do not pass the preview flag unless you use a preview feature on purpose.

If a small container ran Serial before, set the collector explicitly to keep it, or compare it against G1 on your own load.

Run once with defaults and once with -XX:-UseCompactObjectHeaders. Judge on your own service, not on the JEP's benchmarks.

Connect to your real upstreams and clients, including anything behind a proxy or load balancer, to see whether the larger hybrid handshake causes trouble.

Oracle lists Java 29 as the next LTS. That is the natural next production target after 25.

If you are still on Java 17 or 21, the 25 to 29 path matters more than 27. Oracle's roadmap says updates of Oracle JDK 21 released from the October 2026 Critical Patch Update are planned under the Java SE OTN license, and that anyone who wants permissively licensed Oracle builds should be on Oracle JDK 25 or later. That applies to Oracle's builds. Other vendors have their own terms.

What is coming in JDK 28?

The JDK 28 page lists seven JEPs so far, last updated 28 September 2026. They include Value Objects (preview), a Simple JSON API (incubator), Ahead-of-Time Code Compilation, Shenandoah generational mode by default, and PEM Encodings with no "Preview" in its title. Targets can still change before the March 2027 release, so treat this as a watch list.

See the rest of our software coverage for other platform decisions. For the security side of a post-quantum move beyond Java, start in our security lane.

Quick answers

Is JDK 27 an LTS release?
No. Oracle's Java SE Support Roadmap lists Java 8, 11, 17, 21 and 25 as LTS, and Java 29 as the next planned LTS in September 2027. Java 27 is a six-month release. Oracle marks the dates for 27, 28 and 29 as subject to change.
When was JDK 27 released?
JDK 27 reached general availability on 15 September 2026, according to the OpenJDK JDK 27 project page. Oracle published GPL binaries then, and the page says binaries from other vendors follow shortly.
What are the biggest JDK 27 features?
The four finished features are G1 as the default garbage collector in all environments (JEP 523), compact object headers by default (JEP 534), post-quantum hybrid key exchange for TLS 1.3 (JEP 527), and JFR in-process data redaction (JEP 536). The rest are previews or an incubator.
Do I need to change code to upgrade to JDK 27?
Not for the finished features. The collector, object header layout and TLS preference change by default. Code that uses preview APIs, such as structured concurrency, may need edits because those APIs changed again in 27.
How long is JDK 27 supported?
Oracle's table gives Java 27 Premier Support from September 2026 to March 2027, with no Extended Support. Oracle treats a non-LTS release as superseded when the next feature release ships. Other vendors publish their own dates, so check yours.
Should I wait for Java 29?
If you are on Java 25 in production, waiting is reasonable, since 25 is LTS and Oracle lists it to September 2030. Java 29 is planned as the next LTS in September 2027, subject to change.

Found this useful? Share it

Share
Kernel

Software & Business Software Editor

Kernel

I'm US-based, I've daily-driven more Linux distros than I can name, and I treat software like a workshop: what does it do, what does it really cost, and what can I run myself instead. That's why I also cover the CRM, HR and ERP bills that land on a startup the day it signs its first big customer.

Work out the hardware

The Aliteq brief

The tech worth knowing — hardware, AI, gaming, deals. No spam, unsubscribe anytime.

Keep reading