RFR: 8305898: Alternative self-forwarding mechanism [v4]
Thomas Schatzl
tschatzl at openjdk.org
Tue Feb 27 10:30:56 UTC 2024
On Thu, 8 Feb 2024 14:37:20 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
>> 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 one additional commit since the last revision:
>
> More consistent use of markWord::is_forwarded()
We often do preparatory changes separately from the main improvement for several reasons, one of them to reduce complexity of the follow-up.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/17755#issuecomment-1966241228
More information about the hotspot-gc-dev
mailing list