RFR: 8305898: Alternative self-forwarding mechanism

Roman Kennke rkennke at openjdk.org
Thu Aug 22 06:12:06 UTC 2024


On Wed, 21 Aug 2024 17:45:14 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:

>> Currently, the Serial, Parallel and G1 GCs store a pointer to self into object headers, when promotion fails, to indicate that the object has been looked at, but failed promotion. 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 bit #3 (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.
>> 
>> A side-effect of this is that we can get rid of the machinery to preserve headers across promotion failures in Serial and G1. (Parallel GC [ab]uses the preserved-headers structure to also find all the forwarded objects for header restoration. This could be changed, I suppose, but it is not trivial.) If you prefer, I could break-out the removal of the preserved-headers stuff into a separate PR.
>> 
>> This is in preparation of upstreaming compact object headers, and I intend to push it only once all the parts have been approved.
>> 
>> Testing:
>>  - [x] tier1
>>  - [x] tier2
>>  - [x] tier3
>>  - [x] tier4
>>  - [x] Running in production @ AWS since >1year without troubles
>
> src/hotspot/share/gc/serial/defNewGeneration.cpp line 703:
> 
>> 701:   struct ResetForwardedMarkWord : ObjectClosure {
>> 702:     void do_object(oop obj) override {
>> 703:       if (obj->is_self_forwarded()) {
> 
> Why is `is_self_forwarded` treated specially? I'd expect the `is_forwarded` case alone to be enough here.

Because I'd like self-forwarded marks not to be init-ed. Otherwise we'd have to preserve/restore them. Simply unset_self_forwarded() is enough to get them back to the original state.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20603#discussion_r1726400372


More information about the hotspot-gc-dev mailing list