<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/new-features-in-java-27-le3at8ous" -->

---
title: New Features in Java 27 | daily.dev
description: Java 27 ships with nine JEPs total: four final and five still in preview or incubation. The final ones are runtime-level changes requiring no code adjustments:...
canonical: https://daily.dev/posts/new-features-in-java-27-le3at8ous
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: New Features in Java 27 | daily.dev
og:description: Java 27 ships with nine JEPs total: four final and five still in preview or incubation. The final ones are runtime-level changes requiring no code adjustments:...
og:url: https://daily.dev/posts/new-features-in-java-27-le3at8ous
og:image: https://api.daily.dev/og/posts/LE3aT8ous.png
og:image:alt: New Features in Java 27
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# New Features in Java 27

**[Baeldung](https://daily.dev/sources/baeldung)** · 9 min read · 1 upvotes · 0 comments

## Summary

Java 27 ships with nine JEPs total: four final and five still in preview or incubation. The final ones are runtime-level changes requiring no code adjustments: Compact Object Headers are now enabled by default (reducing memory footprint), G1 becomes the default garbage collector everywhere (no more Serial GC exception for small machines), TLS 1.3 gains post-quantum hybrid key exchange (ECDHE combined with ML-KEM), and JFR recordings now redact sensitive values like passwords and tokens in-process. Among preview features, Structured Concurrency introduces breaking changes from its sixth preview (ExecutionException replaces FailedException, awaitAll() removed, onTimeout() renamed to timeout()), Lazy Constants and PEM Encodings see refinements, Primitive Types in Patterns is unchanged, and the Vector API remains incubating with only a bundled SLEEF library bump. JVMCI has been removed from the JDK. Smaller library additions include inverse hyperbolic Math functions, String.encodedLength(), BigDecimal.rootn(), and a faster HashMap.putAll().

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://feeds.feedblitz.com/~/970740575/0/baeldung>

## Questions this post answers

### What breaking changes does Structured Concurrency have in Java 27 compared to the previous preview?

Structured Concurrency's sixth preview changes several APIs: joiners now throw ExecutionException instead of FailedException, Joiner gains a third type parameter for the exception type, awaitAll() is removed, and onTimeout() is renamed to timeout(). Since ExecutionException is checked, existing catch clauses written against the prior preview need updating, and the compiler will flag them.

_Track breaking API changes like this before upgrading preview code on daily.dev._

### Is Compact Object Headers enabled by default in Java 27?

Yes, Compact Object Headers (JEP 519, introduced as a full feature in Java 25) is now enabled by default in Java 27. It reduces memory footprint and speeds up processing and garbage collection, especially for workloads with many small objects like REST DTOs and entities. It can still be disabled with -XX:-UseCompactObjectHeaders, though the old layout is planned for deprecation.

_Developers re-measuring memory limits after JVM upgrades can follow releases like this on daily.dev._

### Does Java 27 change the default garbage collector for small containers?

Yes, Java 27 removes the long-standing exception where machines with a single CPU or less than 1792 MB of memory used Serial GC instead of G1. Now G1 is the default garbage collector everywhere, following G1 improvements made in Java 26 (JEP 522). This mainly affects small containers such as CI runners, sidecars, and serverless environments.

_Teams tuning GC behavior in constrained containers can follow JVM defaults changes on daily.dev._

## Similar posts on daily.dev

- [JDK 27: The quiet before the storm](https://daily.dev/posts/jdk-27-the-quiet-before-the-storm-eixxzoapd) · InfoWorld · 2 upvotes · 0 comments
- [New Features in Java 26](https://daily.dev/posts/new-features-in-java-26-x8pp9vbj4) · Baeldung · 76 upvotes · 9 comments

---

Tags: [#java](https://daily.dev/tags/java), [#jvm](https://daily.dev/tags/jvm)

[View this post on daily.dev](https://daily.dev/posts/new-features-in-java-27-le3at8ous)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"New Features in Java 27","url":"https://daily.dev/posts/new-features-in-java-27-le3at8ous","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/new-features-in-java-27-le3at8ous"},"datePublished":"2026-09-29T07:09:21.826Z","dateModified":"2026-09-30T08:24:19.578Z","description":"Java 27 ships with nine JEPs total: four final and five still in preview or incubation. The final ones are runtime-level changes requiring no code adjustments:...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/bdf334823bf91642cdc4171ac4262e8c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/bdf334823bf91642cdc4171ac4262e8c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Baeldung","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Baeldung","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52cccfb454d946c4b7dfa5e816f9e576","url":"https://daily.dev/sources/baeldung"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/new-features-in-java-27-le3at8ous","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"java,jvm","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Baeldung","item":"https://daily.dev/sources/baeldung"},{"@type":"ListItem","position":3,"name":"New Features in Java 27"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/new-features-in-java-27-le3at8ous#faq","mainEntity":[{"@type":"Question","name":"What breaking changes does Structured Concurrency have in Java 27 compared to the previous preview?","acceptedAnswer":{"@type":"Answer","text":"Structured Concurrency's sixth preview changes several APIs: joiners now throw ExecutionException instead of FailedException, Joiner gains a third type parameter for the exception type, awaitAll() is removed, and onTimeout() is renamed to timeout(). Since ExecutionException is checked, existing catch clauses written against the prior preview need updating, and the compiler will flag them. Track breaking API changes like this before upgrading preview code on daily.dev."}},{"@type":"Question","name":"Is Compact Object Headers enabled by default in Java 27?","acceptedAnswer":{"@type":"Answer","text":"Yes, Compact Object Headers (JEP 519, introduced as a full feature in Java 25) is now enabled by default in Java 27. It reduces memory footprint and speeds up processing and garbage collection, especially for workloads with many small objects like REST DTOs and entities. It can still be disabled with -XX:-UseCompactObjectHeaders, though the old layout is planned for deprecation. Developers re-measuring memory limits after JVM upgrades can follow releases like this on daily.dev."}},{"@type":"Question","name":"Does Java 27 change the default garbage collector for small containers?","acceptedAnswer":{"@type":"Answer","text":"Yes, Java 27 removes the long-standing exception where machines with a single CPU or less than 1792 MB of memory used Serial GC instead of G1. Now G1 is the default garbage collector everywhere, following G1 improvements made in Java 26 (JEP 522). This mainly affects small containers such as CI runners, sidecars, and serverless environments. Teams tuning GC behavior in constrained containers can follow JVM defaults changes on daily.dev."}}]}
```

