Java: Rethink Domain Primitives with Valhalla
a day ago
- #Project Valhalla
- #Performance
- #Java
- Domain primitives, like PositiveInt, encode business constraints but traditionally incurred memory overhead and performance costs due to heap allocations.
- Project Valhalla introduces value classes, allowing the JVM to flatten wrappers into arrays or registers, eliminating headers and indirection, matching primitive memory layout.
- Value classes retain compile-time guarantees (e.g., validation at construction) and enable domain-aware types without performance penalties in hot loops.
- Memory footprint tests show value class arrays (e.g., PositiveInt[10]) use 56 bytes, identical to int[10], while identity classes use ~216 bytes (4× more).
- Limitations include: generics (List<PositiveInt>) still box, framework integration requires adapters (e.g., for Jackson), and == semantics shift to value-based comparison.
- Valhalla is in preview (Java 27 EA), with future null-restricted references and specialization planned, potentially removing barriers to using domain primitives widely.