OpenJDK proposals would introduce value objects, primitive objects, and unify basic primitives with objects, so that all Java values will be objects.
OpenJDK’s Project Valhalla, which explores advanced Java language and JVM feature possibilities, is moving forward with a staged delivery of value objects, primitive objects, and unification of basic primitives.
Overall, the ambitious Valhalla project is intended to heal a rift between primitives and objects. The three key capabilities, cited in a December 2021 blog post, “The State of Valhalla” by Brian Goetz, Java language architect at Oracle, are described in JDK Enhancement Proposals (JEP) currently pending in the OpenJDK community. Those three capabilities are:
- Value objects that would enhance the Java object model with class instances that have only final instance fields and lack object identity.
- Primitive objects that would enhance the Java object model with user-declared primitive objects.
- Unification of basic primitives and objects.
Begun in 2014, Valhalla has the goals of bringing more flexible, flattened data types to JVM-based languages in order to restore the alignment between the programming model and the performance characteristics of modern hardware. A recent three-part series of blog posts on the project — “The Road to Valhalla,” “The Language Model,” and “The State of Valhalla” — outline the progression and future plans for these enhancements.
The introduction of value objects aims to allow developers to create instances that behave like simple data carriers. These objects will be immutable and lack identity, making them more lightweight and efficient. This change is expected to improve performance by reducing the overhead associated with object identity, such as synchronization and garbage collection.
Primitive objects extend this concept by allowing developers to define their own primitive types. These user-declared primitives would enable more efficient data manipulation and storage, closer to the metal, while still maintaining the benefits of Java’s object-oriented programming model. This is particularly relevant for performance-critical applications, such as those in scientific computing or high-frequency trading, where the efficiency of data handling can have a significant impact.
The final piece of the puzzle is the unification of basic primitives and objects. Currently, Java distinguishes between primitive types (such as int, float, etc.) and reference types (objects). This separation complicates the language and runtime, leading to the need for autoboxing and unboxing. By unifying these concepts, Project Valhalla aims to simplify the type system and enhance the performance and flexibility of the JVM.
The realization of Project Valhalla’s goals will be a significant milestone for the Java ecosystem, potentially influencing not only Java but other JVM-based languages. These enhancements promise to bring more efficient data handling, improved performance, and a cleaner, more consistent programming model to Java developers.