RFR: 8305895: Implement JEP 450: Compact Object Headers (Experimental) [v3]
    Stefan Karlsson 
    stefank at openjdk.org
       
    Fri Aug 30 11:10:23 UTC 2024
    
    
  
On Thu, 22 Aug 2024 17:12:09 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:
>> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Remove hashcode leftovers from SA
>
> src/hotspot/share/gc/serial/defNewGeneration.cpp line 707:
> 
>> 705:       } else if (obj->is_forwarded()) {
>> 706:         // To restore the klass-bits in the header.
>> 707:         obj->forward_safe_init_mark();
> 
> I wonder if not modifying successful-forwarded objs is cleaner. Sth like:
> 
> 
> reset_self_forwarded_in_space(space) {
>   cur = space->bottom();
>   top = space->top();
> 
>   while (cur < top) {
>     obj = cast_to_oop(cur);
> 
>     if (obj->is_self_forwarded()) {
>       obj->unset_self_forwarded();
>       obj_size = obj->size();
>     } else {
>       assert(obj->is_forwarded(), "inv");
>       obj_size = obj->forwardee()->size();
>     }
> 
>     cur += obj_size;
>   }
> }
> 
> reset_self_forwarded_in_space(eden());
> reset_self_forwarded_in_space(from());
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.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20677#discussion_r1738433303
    
    
More information about the hotspot-dev
mailing list