<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v" -->

---
title: Why it takes 3000 commits to bring Valhalla's value...
description: A JVM engineer from Oracle's Java platform group walks through Project Valhalla's value objects (JEP 401) and strict field initialization, landing in JDK 28 as...
canonical: https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms | daily.dev
og:description: A JVM engineer from Oracle's Java platform group walks through Project Valhalla's value objects (JEP 401) and strict field initialization, landing in JDK 28 as...
og:url: https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v
og:image: https://api.daily.dev/og/posts/E7YziUW2V.png
og:image:alt: Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms
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.

# Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms

**[Devoxx](https://daily.dev/sources/devoxx)** · 51 min read · 0 upvotes · 0 comments

## Summary

A JVM engineer from Oracle's Java platform group walks through Project Valhalla's value objects (JEP 401) and strict field initialization, landing in JDK 28 as preview features. He explains the 'value' keyword, which drops object identity to enable VM optimizations like heap flattening (packing payloads directly into arrays instead of pointers) and scalarization (keeping fields in registers instead of allocating objects), yielding substantial performance and density gains in microbenchmarks. He details the decade-plus history of the project, starting in 2014 with wild early prototypes with 13 custom bytecodes, through a 2019 design pivot (LWorld branch), to a 2024 breakthrough with flexible constructor bodies and strict initialization, culminating in a nearly 3,000-commit merge into OpenJDK mainline on July 31st involving 64 authors and 14 reviewers. He covers practical implications: equals/equals== semantics change to field comparison, automatic migration of wrapper classes to value-based types, and caveats around when flattening does or doesn't happen (nulls, size thresholds, reference-heavy fields).

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=D_AmK8-UnZg>

## Questions this post answers

### What does the value keyword do to a Java class in JDK 28's Valhalla preview?

The value keyword makes all fields implicitly final, requires fields to be initialized before the super call, removes object identity, changes == from reference comparison to a field-by-field value comparison, and makes the class effectively final (no subclassing unless abstract). It's a preview feature in JDK 28, enabled with --enable-preview and --release 28.

_Developers evaluating Valhalla's identity trade-offs can track JDK 28 preview changes on daily.dev._

### Why doesn't the JVM flatten all value objects into arrays?

Flattening is skipped when nulls are involved and the payload plus a null marker would exceed practical atomicity limits (roughly a cache line), when the value object is large, or when it contains many object references, since flattening all of them would require extra read/write barriers that cost more than they save. The JVM instead falls back to treating the value as a reference-like container in those cases.

_Java engineers tuning for memory density can follow coverage of Valhalla's flattening heuristics on daily.dev._

### How many commits and contributors went into merging Project Valhalla's value objects into OpenJDK mainline?

Nearly 3,000 commits were merged into OpenJDK mainline in a single push on July 31st, with about 64 authors and 14 named reviewers credited, though many more people contributed to the review behind the scenes. The project itself traces back to 2014, with serious prototyping starting around 2015 and a redesigned branch cut around 2019.

_Anyone following major JDK feature timelines can track Valhalla's progress toward release on daily.dev._

## Similar posts on daily.dev

- [Java’s biggest language change in a decade is finally landing. It took 197,000 lines of code.](https://daily.dev/posts/java-s-biggest-language-change-in-a-decade-is-finally-landing-it-took-197-000-lines-of-code--8eeespmnb) · The Next Web · 39 upvotes · 1 comments
- [Value Classes Still Need Compiler Sympathy](https://daily.dev/posts/value-classes-still-need-compiler-sympathy-6gmnyemca) · Inside Java · 0 upvotes · 0 comments
- [Valhalla, Now\!](https://daily.dev/posts/valhalla-now--aua4ibtem) · nipafx \(Nicolai Parlog\) · 0 upvotes · 0 comments
- [8389219: Implement JEP 401: Value Objects \(Preview\) by MrSimms · Pull Request \#31120 · openjdk/jdk](https://daily.dev/posts/8389219-implement-jep-401-value-objects-preview-by-mrsimms-pull-request-31120-openjdk-jdk-hghnkbn5r) · Hacker News · 0 upvotes · 0 comments

---

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

[View this post on daily.dev](https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v)

```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":"Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms","url":"https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v"},"datePublished":"2026-10-13T17:04:36.777Z","dateModified":"2026-10-13T17:10:06.250Z","description":"A JVM engineer from Oracle's Java platform group walks through Project Valhalla's value objects (JEP 401) and strict field initialization, landing in JDK 28 as...","image":"https://i.ytimg.com/vi/D_AmK8-UnZg/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/D_AmK8-UnZg/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Devoxx","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":"Devoxx","logo":"https://media.daily.dev/image/upload/s--6vG797wn--/f_auto,q_auto/v1773648800/logos/devoxx?_a=BAMAMiiu0","url":"https://daily.dev/sources/devoxx"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,java","timeRequired":"PT51M","video":{"@type":"VideoObject","name":"Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms","description":"A JVM engineer from Oracle's Java platform group walks through Project Valhalla's value objects (JEP 401) and strict field initialization, landing in JDK 28 as...","thumbnailUrl":"https://i.ytimg.com/vi/D_AmK8-UnZg/sddefault.jpg","uploadDate":"2026-10-13T17:04:36.777Z","duration":"PT51M","url":"https://api.daily.dev/r/E7YziUW2V","embedUrl":"https://www.youtube.com/embed/D_AmK8-UnZg"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Devoxx","item":"https://daily.dev/sources/devoxx"},{"@type":"ListItem","position":3,"name":"Why it takes 3000 commits to bring Valhalla's value objects to the JDK by David Simms"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/why-it-takes-3000-commits-to-bring-valhalla-s-value-objects-to-the-jdk-by-david-simms-e7yziuw2v#faq","mainEntity":[{"@type":"Question","name":"What does the value keyword do to a Java class in JDK 28's Valhalla preview?","acceptedAnswer":{"@type":"Answer","text":"The value keyword makes all fields implicitly final, requires fields to be initialized before the super call, removes object identity, changes == from reference comparison to a field-by-field value comparison, and makes the class effectively final (no subclassing unless abstract). It's a preview feature in JDK 28, enabled with --enable-preview and --release 28. Developers evaluating Valhalla's identity trade-offs can track JDK 28 preview changes on daily.dev."}},{"@type":"Question","name":"Why doesn't the JVM flatten all value objects into arrays?","acceptedAnswer":{"@type":"Answer","text":"Flattening is skipped when nulls are involved and the payload plus a null marker would exceed practical atomicity limits (roughly a cache line), when the value object is large, or when it contains many object references, since flattening all of them would require extra read/write barriers that cost more than they save. The JVM instead falls back to treating the value as a reference-like container in those cases. Java engineers tuning for memory density can follow coverage of Valhalla's flattening heuristics on daily.dev."}},{"@type":"Question","name":"How many commits and contributors went into merging Project Valhalla's value objects into OpenJDK mainline?","acceptedAnswer":{"@type":"Answer","text":"Nearly 3,000 commits were merged into OpenJDK mainline in a single push on July 31st, with about 64 authors and 14 named reviewers credited, though many more people contributed to the review behind the scenes. The project itself traces back to 2014, with serious prototyping starting around 2015 and a redesigned branch cut around 2019. Anyone following major JDK feature timelines can track Valhalla's progress toward release on daily.dev."}}]}
```

