RFR: 8305898: Alternative self-forwarding mechanism [v3]
Roman Kennke
rkennke at openjdk.org
Thu Feb 8 14:32:16 UTC 2024
> Currently, the Serial, Parallel and G1 GCs store a pointer to self into object headers to indicate promotion failure. This is problematic for compact object headers ([JDK-8294992](https://bugs.openjdk.org/browse/JDK-8294992)) because it would (temporarily) over-write the crucial class information, which we need for heap parsing. I would like to propose an alternative: use the currently unused 3rd header bit (previously biased-locking bit) to indicate that an object is 'self-forwarded'. That preserves the crucial class information in the upper bits of the header until the full header gets restored.
>
> This is a trimmed-down/simplified version of the original proposal #13779:
> - It doesn't use/introduce any flags and avoids the associated branching.
> - It doesn't (need to) deal with displaced headers. (Current code would preserve header if necessary, Lilliput code would not use displaced headers and set the 3rd bit directly in existing header.)
>
> Testing:
> - [x] hotspot_gc
> - [x] tier1
> - [x] tier2
Roman Kennke has updated the pull request incrementally with two additional commits since the last revision:
- Address @stefank's review-comments
- Fix alignas to use constant expression
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/17755/files
- new: https://git.openjdk.org/jdk/pull/17755/files/c7ddf821..fbfb1e73
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=17755&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=17755&range=01-02
Stats: 37 lines in 4 files changed: 15 ins; 8 del; 14 mod
Patch: https://git.openjdk.org/jdk/pull/17755.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17755/head:pull/17755
PR: https://git.openjdk.org/jdk/pull/17755
More information about the hotspot-gc-dev
mailing list