RFR: 8305895: Implementation: JEP 450: Compact Object Headers (Experimental)
Roman Kennke
rkennke at openjdk.org
Mon May 8 15:19:02 UTC 2023
This is the main body of the JEP 450: Compact Object Headers (Experimental).
Main changes:
- Introduction of the (experimental) flag UseCompactObjectHeaders. All changes in this PR are protected by this flag.
- The compressed Klass* can now be stored in the mark-word of objects. In order to be able to do this, we are building on #10907, #13582 and #13779 to protect the relevant (upper 32) bits of the mark-word. Significant parts of this PR deal with loading the compressed Klass* from the mark-word, and dealing with (monitor-)locked objects. When the object is monitor-locked, we load the displaced mark-word from the monitor, and load the compressed Klass* from there. This PR also changes some code paths (mostly in GCs) to be more careful when accessing Klass* (or mark-word or size) to be able to fetch it from the forwardee in case the object is forwarded, and/or reach through to the monitor when the object is locked by a monitor.
- The identity hash-code is narrowed to 25 bits.
- Instances can now have their base-offset (the offset where the field layouter starts to place fields) at offset 8 (instead of 12 or 16).
- Arrays will can now store their length at offset 8. Due to alignment restrictions, array elements will still start at offset 16. #11044 will resolve that restriction and allow array elements to start at offset 12 (except for long, double and uncompressed oops, which are still required to start at an element-aligned offset).
- CDS can now write and read archives with the compressed header. However, it is not possible to read an archive that has been written with an opposite setting of UseCompactObjectHeaders.
Testing:
(+UseCompactObjectHeaders tests are run with the flag hard-patched into the build, to also catch @flagless tests, and to avoid mismatches with CDS - see above.)
- [x] tier1 (x86_64)
- [x] tier2 (x86_64)
- [ ] tier3 (x86_64)
- [ ] tier4 (x86_64)
- [x] tier1 (aarch64)
- [x] tier2 (aarch64)
- [ ] tier3 (aarch64)
- [ ] tier4 (aarch64)
- [ ] tier1 (x86_64) +UseCompactObjectHeaders
- [ ] tier2 (x86_64) +UseCompactObjectHeaders
- [ ] tier3 (x86_64) +UseCompactObjectHeaders
- [ ] tier4 (x86_64) +UseCompactObjectHeaders
- [ ] tier1 (aarch64) +UseCompactObjectHeaders
- [ ] tier2 (aarch64) +UseCompactObjectHeaders
- [ ] tier3 (aarch64) +UseCompactObjectHeaders
- [ ] tier4 (aarch64) +UseCompactObjectHeaders
-------------
Depends on: https://git.openjdk.org/jdk/pull/13779
Commit messages:
- Imporve GetObjectSizeIntrinsicsTest
- Some GC fixes
- Add BaseOffsets test
- Check UseCompactObjectHeaders flag in TestPLABPromotion
- Turn off UseCompactObjectHeaders by default
- Fix typeArrayOop gtest
- Fix OldLayoutCheck test
- SA fix
- CDS fix
- Turn off CDS when UseCompactObjectHeaders is not at default setting
- ... and 11 more: https://git.openjdk.org/jdk/compare/b9c8ca0f...7b87ae9b
Changes: https://git.openjdk.org/jdk/pull/13844/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13844&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8305895
Stats: 1156 lines in 80 files changed: 925 ins; 71 del; 160 mod
Patch: https://git.openjdk.org/jdk/pull/13844.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/13844/head:pull/13844
PR: https://git.openjdk.org/jdk/pull/13844
More information about the hotspot-dev
mailing list