Value Types 
Project Valhalla
Project Valhalla 
• Specialisation of Generics 
• Atomic VarHandles 
• Value Types
Codes like a class, 
works like an int. 
http://cr.openjdk.java.net/~jrose/values/values-0.html 
“…to support small immutable, identityless value types.”
Type Signature Java Type 
1) Z boolean 
2) B byte 
3) C char 
4) S short 
5) I int 
6) J long 
7) F float 
8) D double 
9) L class ; class 
10) [ type type[] 
11) V void
Type Signature Java Type 
1) Z boolean 
2) B byte 
3) C char 
4) S short 
5) I int 
6) J long 
7) F float 
8) D double 
9) L class ; class 
10) [ type type[] 
11) V void
Type Signature Java Type 
1) Z boolean 
2) B byte 
3) C char 
4) S short 
5) I Values 
int 
6) J long 
7) F float 
8) D double 
9) L class ; class 
10) [ type References 
type[] 
11) V void
Type Signature Java Type 
1) Z boolean 
2) B byte 
3) C char 
4) S short 
5) I Values 
int 
6) J long 
7) F float 
8) D double 
9) Q class ; value 
10) L class ; class 
11) [ type References 
type[] 
12) V void
Codes like a class 
public __ByValue class Complex { 
double real; 
double imaginary; 
}
Codes like a class 
public __ByValue class Slice { 
byte[] array; 
int offset; 
int length; 
}
Codes like a class 
public __ByValue class Decimal64 { 
long value; 
long significand() { 
return value & 0xFFFFFFFFFFFFFF; 
} 
long exponent() { 
return value >> 56; 
} 
}
Codes like a class 
public __ByValue class Price { 
Decimal64 value; 
} 
public __ByValue class Quantity { 
Decimal64 value; 
}
Works like an int 
• Immutable 
• Passed as a copy (semantically) 
• Lacks identity 
• Equals??? (vcmp)
Why? 
Because caches.
public class Order { 
Price orderPrice; 
Quantity orderQuantity; 
}
java.util.Optional 
This is a value-based class; use of identity-sensitive 
operations (including reference equality (==), identity 
hash code, or synchronization) on instances of 
Optional may have unpredictable results and should 
be avoided. 
http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html

Value Types

  • 1.
  • 2.
    Project Valhalla •Specialisation of Generics • Atomic VarHandles • Value Types
  • 3.
    Codes like aclass, works like an int. http://cr.openjdk.java.net/~jrose/values/values-0.html “…to support small immutable, identityless value types.”
  • 4.
    Type Signature JavaType 1) Z boolean 2) B byte 3) C char 4) S short 5) I int 6) J long 7) F float 8) D double 9) L class ; class 10) [ type type[] 11) V void
  • 5.
    Type Signature JavaType 1) Z boolean 2) B byte 3) C char 4) S short 5) I int 6) J long 7) F float 8) D double 9) L class ; class 10) [ type type[] 11) V void
  • 6.
    Type Signature JavaType 1) Z boolean 2) B byte 3) C char 4) S short 5) I Values int 6) J long 7) F float 8) D double 9) L class ; class 10) [ type References type[] 11) V void
  • 7.
    Type Signature JavaType 1) Z boolean 2) B byte 3) C char 4) S short 5) I Values int 6) J long 7) F float 8) D double 9) Q class ; value 10) L class ; class 11) [ type References type[] 12) V void
  • 8.
    Codes like aclass public __ByValue class Complex { double real; double imaginary; }
  • 9.
    Codes like aclass public __ByValue class Slice { byte[] array; int offset; int length; }
  • 10.
    Codes like aclass public __ByValue class Decimal64 { long value; long significand() { return value & 0xFFFFFFFFFFFFFF; } long exponent() { return value >> 56; } }
  • 11.
    Codes like aclass public __ByValue class Price { Decimal64 value; } public __ByValue class Quantity { Decimal64 value; }
  • 12.
    Works like anint • Immutable • Passed as a copy (semantically) • Lacks identity • Equals??? (vcmp)
  • 13.
  • 14.
    public class Order{ Price orderPrice; Quantity orderQuantity; }
  • 17.
    java.util.Optional This isa value-based class; use of identity-sensitive operations (including reference equality (==), identity hash code, or synchronization) on instances of Optional may have unpredictable results and should be avoided. http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html