RFR: 8305895: Implement JEP 450: Compact Object Headers (Experimental) [v3]
Albert Mingkun Yang
ayang at openjdk.org
Fri Aug 30 18:13:23 UTC 2024
On Fri, 30 Aug 2024 11:15:23 GMT, Stefan Karlsson <stefank at openjdk.org> wrote:
>> I was thinking the same, but there's a problem with that. If we get a promotion failure in the young gen, we are leaving the dead objects marked as forwarded. Then when the Full GC scans these regions with dead objects it will mistakenly think that they have been marked alive because `is_forwarded() == is_gc_marked()`. The code in `phase2_calculate_new_addr` will then break when it looks for `is_gc_marked` objects.
>
> FWIW, the ParallelGC does something very similar to what you propose, except that it walks bitmaps instead of paring the space to find the self-forwarded objects. It then has a check inside object_iterate to make sure that it doesn't expose the dead objects (in eden and the from space) to heap dumpers and histogram printers.
>
> Because of the the code above, the SerialGC clears away the information about what objects are dead in eden and the from space, so heap dumpers and histogram printers will include these dead objects. We might want to fix that as a future RFE.
> If we get a promotion failure in the young gen, we are leaving the dead objects marked as forwarded.
True; need to do sth like `obj->init_mark();` for the non-self-forwarded case. The postcondition is that no forwarded objs in eden/from.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20677#discussion_r1739218189
More information about the build-dev
mailing list