Project Valhalla
Purpose
Keep three questions separate: what the current proposal guarantees semantically, what a particular
EA build implements, and what layout/performance that build chooses for one workload. Valhalla is a
moving OpenJDK project; plausible syntax copied from an older design is a common source of false
guidance.
Status-first workflow
- Record the exact claim and whether it concerns language semantics, class-file format, library
specialization, storage layout or measured performance.
- Check the current JEP header, project page and target-build release notes. Record status and target
release; never infer availability from a JEP number or old design note.
- Inspect the project's supported Java/toolchain first. If executable behavior matters, pin the
EA build hash/vendor/platform and preview flags, compile the smallest example and retain output.
Use an isolated toolchain; do not change the application's supported JDK or add preview flags
to its build merely to run an experiment. If no suitable build is available, report that limit.
- Separate guaranteed absence of identity from optional flattening or specialization. State what
remains implementation-dependent.
- Measure the current supported baseline, then ordinary-class and value-class variants on the
same EA build. The first comparison includes JDK changes; the second better isolates the
representation change. Primitive-array or Structure-of-Arrays alternatives must preserve the
required semantics. Compare workload and layout evidence, not just allocation counts.
- Produce a migration watch item, not production code, unless the project's supported JDK really
contains the required feature and preview risk is explicitly accepted.
Decision rules
- Current JEP text outranks historical “State of Valhalla” notes for the active design. Historical
terms and bytecodes must be labeled historical. For an older pinned build's actual behavior,
consult its own sources and documentation; a newer JEP does not retroactively change that build.
- A value class is about identity semantics. It does not by itself promise flattened storage in
every field, array, generic container or calling convention.
- Reduced headers/indirection are analytical opportunities until the exact build's layout and
workload are measured. Use JOL, JMH and allocation/cache evidence appropriate to that build.
- Do not claim arbitrary generic specialization or zero boxing unless the specific proposal and
build implement it for that use.
- Migration is not semantics-neutral. Audit identity-sensitive synchronization, identity hash,
reference equality, identity collections, nullability/default values, serialization and native
boundaries.
- Identity-free does not mean primitive, deeply immutable, or universally interchangeable under
domain equality. Inspect field-reference semantics, mutable referents and the proposal's
distinction between
== and equals; do not substitute operators mechanically.
- Escape analysis remains relevant to ordinary identity classes and to allocations/layouts the VM
does not flatten. Valhalla does not make compiler evidence obsolete.
Output
Report verified current status, observed on pinned EA build, inference, and unresolved as
separate sections. Every performance recommendation names the control, raw evidence, confidence and
what would falsify it.
References
- Status and experiment protocol — read whenever the request
asserts release availability, uses preview syntax or compares layout/performance.
1---2name: project-valhalla3description: Evaluating Project Valhalla value-class proposals and Early-Access builds without presenting draft syntax or flattening heuristics as released Java behavior. Use when code or documentation claims value classes remove identity, guarantee flattened storage, eliminate boxing, change object layout, or are available in a particular JDK; and when designing an experiment for a future migration. Does not replace current object-layout measurement (object-layout-and-footprint), escape-analysis diagnosis (escape-analysis-internals), or general JDK upgrade planning (jdk-upgrade-impact).4---56# Project Valhalla78## Purpose910Keep three questions separate: what the current proposal guarantees semantically, what a particular11EA build implements, and what layout/performance that build chooses for one workload. Valhalla is a12moving OpenJDK project; plausible syntax copied from an older design is a common source of false13guidance.1415## Status-first workflow16171. Record the exact claim and whether it concerns language semantics, class-file format, library18 specialization, storage layout or measured performance.192. Check the current JEP header, project page and target-build release notes. Record status and target20 release; never infer availability from a JEP number or old design note.213. Inspect the project's supported Java/toolchain first. If executable behavior matters, pin the22 EA build hash/vendor/platform and preview flags, compile the smallest example and retain output.23 Use an isolated toolchain; do not change the application's supported JDK or add preview flags24 to its build merely to run an experiment. If no suitable build is available, report that limit.254. Separate guaranteed absence of identity from optional flattening or specialization. State what26 remains implementation-dependent.275. Measure the current supported baseline, then ordinary-class and value-class variants on the28 same EA build. The first comparison includes JDK changes; the second better isolates the29 representation change. Primitive-array or Structure-of-Arrays alternatives must preserve the30 required semantics. Compare workload and layout evidence, not just allocation counts.316. Produce a migration watch item, not production code, unless the project's supported JDK really32 contains the required feature and preview risk is explicitly accepted.3334## Decision rules3536- Current JEP text outranks historical “State of Valhalla” notes for the active design. Historical37 terms and bytecodes must be labeled historical. For an older pinned build's actual behavior,38 consult its own sources and documentation; a newer JEP does not retroactively change that build.39- A value class is about identity semantics. It does not by itself promise flattened storage in40 every field, array, generic container or calling convention.41- Reduced headers/indirection are analytical opportunities until the exact build's layout and42 workload are measured. Use JOL, JMH and allocation/cache evidence appropriate to that build.43- Do not claim arbitrary generic specialization or zero boxing unless the specific proposal and44 build implement it for that use.45- Migration is not semantics-neutral. Audit identity-sensitive synchronization, identity hash,46 reference equality, identity collections, nullability/default values, serialization and native47 boundaries.48- Identity-free does not mean primitive, deeply immutable, or universally interchangeable under49 domain equality. Inspect field-reference semantics, mutable referents and the proposal's50 distinction between `==` and `equals`; do not substitute operators mechanically.51- Escape analysis remains relevant to ordinary identity classes and to allocations/layouts the VM52 does not flatten. Valhalla does not make compiler evidence obsolete.5354## Output5556Report `verified current status`, `observed on pinned EA build`, `inference`, and `unresolved` as57separate sections. Every performance recommendation names the control, raw evidence, confidence and58what would falsify it.5960## References6162- [Status and experiment protocol](references/status-and-experiments.md) — read whenever the request63 asserts release availability, uses preview syntax or compares layout/performance.