2. Project Valhalla
• Specialisation of Generics
• Atomic VarHandles
• Value Types
3. 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.”
4. 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
5. 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
6. 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
7. 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
8. Codes like a class
public __ByValue class Complex {
double real;
double imaginary;
}
9. Codes like a class
public __ByValue class Slice {
byte[] array;
int offset;
int length;
}
10. Codes like a class
public __ByValue class Decimal64 {
long value;
long significand() {
return value & 0xFFFFFFFFFFFFFF;
}
long exponent() {
return value >> 56;
}
}
11. Codes like a class
public __ByValue class Price {
Decimal64 value;
}
public __ByValue class Quantity {
Decimal64 value;
}
12. Works like an int
• Immutable
• Passed as a copy (semantically)
• Lacks identity
• Equals??? (vcmp)
17. 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