...
- The Minimal Value Types project is an early prototype for Value Types
- provides initial subset of Value Type functionality
- provides a new type which is:
- immutable, identity-agnostic, non-nullable, non-synchronizable, final
- does not inherit from java.lang.Object
- Value Types contained in References, other Value Types or in Arrays are flattenable
- Value Types can
- Arrays of value types are flattened
- Can contain primitives or references
...
How to Try Minimal Value Types:
Early Access Binaries
http://jdk.java.net/valhalla/
Repository and Build Instructions
...
hg clone http://hg.openjdk.java.net/valhalla/valhalla valhalla-mvt
cd valhalla
sh get_source.sh
-mvt
hg defpath du <openjdkname>
hg update -r mvt // name of branchsh common/bin/hgforest.sh update -r mvt
To update repository:
cd valhalla
sh common/bin/hgforest.sh pull
-mvt
hg pull
hg sh common/bin/hgforest.sh update -r mvt // name of branch
To build repository
bash configure
...
http://cr.openjdk.java.net/~chegar/docs/sandbox.html // instructions for working with branch repositories (not yet updated for consolidation)
Note: Valhalla is a child of the jdk10/hs repository, to keep current with latest hotspot development.
...
- Create a POJO using an experimental javac, with an annotation ValueCapableClass (jvm.internal.value.ValueCapableClass)
- JVM will derive a Derived Value Class (DVC) from this defined "box" which we call the Value Capable Class (VCC)
- DVC contains an immutable copy of the instance fields from the VCC
- Work with MethodHandles and experimental reflection package ValueType (jdk.experimental.value.ValueType)
- Or spin your own byte codes
- experimental MethodBuilder (jdk/experimental/value.MethodHandleBuilder)
- future: ASM support is planned
...
- Code samples
- See directory jdk/test/valhalla/mvt in your repository
Run Experimental MVT
- java -Xverify:none -XX:+EnableMVT <Test>
- Command-line flags: Minimal Value Types Command-line Options
- java: use -Xverify:none -XX:+EnableMVT
Filing Bugs
Filing Bugs
- Send email to valhalla-dev@openjdk.java.netFile openjdk bugs with synopsis starting with "[MVT]" and labels: "mvt"
Limitations
- platforms: x64 Linux, x64 Mac OS X
- no verifier VarHandles (work-in-progress for an update)no VarHandles
- no support for atomic fields containing value types (work-in-progress for an update)
- no JNI, unsafe, jvmti, redefineclasses, reflection
- -Xint and C2 only, no C1, no tiered-compilation
- interpreter is not optimized, focus is on JIT optimization
- Need additional USE CASES for optimizations
- Working on additional test cases
...
...