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.
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.
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.
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.
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
Status in 27
Who it affects
523 G1 as default collector
Feature
Everyone who never set a collector
534 Compact object headers
Feature
Memory and GC-heavy services
527 Post-quantum TLS 1.3
Feature
Anyone using javax.net.ssl
536 JFR data redaction
Feature
Teams that share JFR recordings
533 Structured concurrency
Seventh preview
Teams on virtual threads
532 Primitive types in patterns
Fifth preview
Language early adopters
531 Lazy constants
Third preview
Startup-sensitive code
538 PEM encodings
Third preview
Code that parses keys and certificates
537 Vector API
Twelfth incubator
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.
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.