-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
repo-valhalla
It's desirable (wishful thinking) that boxed inline types have the same layout/size as equivalent reference classes (having the same field types).
https://bugs.openjdk.java.net/browse/JDK-8238768 improves the situation, but not completely.
Here is the test: http://cr.openjdk.java.net/~skuksenko/valhalla/8238983/
-XX:+UseNewLayout:
sizeof(Inline TypeB)=16
sizeof(Ref TypeB)=16
sizeof(Inline TypeC)=16
sizeof(Ref TypeC)=16
sizeof(Inline TypeI)=16
sizeof(Ref TypeI)=16
sizeof(Inline TypeL)=24
sizeof(Ref TypeL)=24
sizeof(Inline TypeF)=16
sizeof(Ref TypeF)=16
sizeof(Inline TypeD)=24
sizeof(Ref TypeD)=24
sizeof(Inline TypeII)=24
sizeof(Ref TypeII)=24
sizeof(Inline TypeLL)=32
sizeof(Ref TypeLL)=32
sizeof(Inline TypeDD)=32
sizeof(Ref TypeDD)=32
sizeof(Inline TypeLI)=32
sizeof(Ref TypeLI)=24
sizeof(Inline TypeIL)=32
sizeof(Ref TypeIL)=24
sizeof(Inline TypeID)=32
sizeof(Ref TypeID)=24
sizeof(Inline TypeDI)=32
sizeof(Ref TypeDI)=24
Inline types LI/IL/ID/DI have larger size than their reference analogue.
For comparison, the old layout has more inconsistencies:
-XX:-UseNewLayout:
sizeof(Inline TypeB)=24
sizeof(Ref TypeB)=16
sizeof(Inline TypeC)=24
sizeof(Ref TypeC)=16
sizeof(Inline TypeI)=24
sizeof(Ref TypeI)=16
sizeof(Inline TypeL)=24
sizeof(Ref TypeL)=24
sizeof(Inline TypeF)=24
sizeof(Ref TypeF)=16
sizeof(Inline TypeD)=24
sizeof(Ref TypeD)=24
sizeof(Inline TypeII)=24
sizeof(Ref TypeII)=24
sizeof(Inline TypeLL)=32
sizeof(Ref TypeLL)=32
sizeof(Inline TypeDD)=32
sizeof(Ref TypeDD)=32
sizeof(Inline TypeLI)=32
sizeof(Ref TypeLI)=24
sizeof(Inline TypeIL)=32
sizeof(Ref TypeIL)=24
sizeof(Inline TypeID)=32
sizeof(Ref TypeID)=24
sizeof(Inline TypeDI)=32
sizeof(Ref TypeDI)=24
https://bugs.openjdk.java.net/browse/JDK-8238768 improves the situation, but not completely.
Here is the test: http://cr.openjdk.java.net/~skuksenko/valhalla/8238983/
-XX:+UseNewLayout:
sizeof(Inline TypeB)=16
sizeof(Ref TypeB)=16
sizeof(Inline TypeC)=16
sizeof(Ref TypeC)=16
sizeof(Inline TypeI)=16
sizeof(Ref TypeI)=16
sizeof(Inline TypeL)=24
sizeof(Ref TypeL)=24
sizeof(Inline TypeF)=16
sizeof(Ref TypeF)=16
sizeof(Inline TypeD)=24
sizeof(Ref TypeD)=24
sizeof(Inline TypeII)=24
sizeof(Ref TypeII)=24
sizeof(Inline TypeLL)=32
sizeof(Ref TypeLL)=32
sizeof(Inline TypeDD)=32
sizeof(Ref TypeDD)=32
sizeof(Inline TypeLI)=32
sizeof(Ref TypeLI)=24
sizeof(Inline TypeIL)=32
sizeof(Ref TypeIL)=24
sizeof(Inline TypeID)=32
sizeof(Ref TypeID)=24
sizeof(Inline TypeDI)=32
sizeof(Ref TypeDI)=24
Inline types LI/IL/ID/DI have larger size than their reference analogue.
For comparison, the old layout has more inconsistencies:
-XX:-UseNewLayout:
sizeof(Inline TypeB)=24
sizeof(Ref TypeB)=16
sizeof(Inline TypeC)=24
sizeof(Ref TypeC)=16
sizeof(Inline TypeI)=24
sizeof(Ref TypeI)=16
sizeof(Inline TypeL)=24
sizeof(Ref TypeL)=24
sizeof(Inline TypeF)=24
sizeof(Ref TypeF)=16
sizeof(Inline TypeD)=24
sizeof(Ref TypeD)=24
sizeof(Inline TypeII)=24
sizeof(Ref TypeII)=24
sizeof(Inline TypeLL)=32
sizeof(Ref TypeLL)=32
sizeof(Inline TypeDD)=32
sizeof(Ref TypeDD)=32
sizeof(Inline TypeLI)=32
sizeof(Ref TypeLI)=24
sizeof(Inline TypeIL)=32
sizeof(Ref TypeIL)=24
sizeof(Inline TypeID)=32
sizeof(Ref TypeID)=24
sizeof(Inline TypeDI)=32
sizeof(Ref TypeDI)=24
- relates to
-
JDK-8238369 [lworld] Incorrect layout of inline type in flattened array.
-
- Resolved
-