RFR (S): 8023021: Unnecessary clearing of the card table introduced by the fix for JDK-8023013

Bengt Rutisson bengt.rutisson at oracle.com
Wed Aug 14 14:04:20 UTC 2013


Hi all,

Erik discovered a bug with the change for JDK-8023013 that I just 
pushed. With my change we will do some unnecessary clearing of the card 
table.

Here's a webrev to fix that:
http://cr.openjdk.java.net/~brutisso/8023021/webrev.00/

Thanks Erik for finding this!

 From the bug report:

The fix for JDK-8023013 "Use specific generations rather than generation 
iteration" introduced unnecessary clearing of the card table.

This loop (which existed both in CardTableRS::clear_into_younger() and 
CardTableRS::invalidate_or_clear()):

   Generation* g = gen;
   for(Generation* prev_gen = gch->prev_gen(g); prev_gen != NULL;
       g = prev_gen, prev_gen = gch->prev_gen(g)) {
     ...
   }

was translated in to one call for the old generation and one for the 
young generation. But this is wrong. The loop is actually not a loop 
when we only have two generations. These methods are only called with 
gen being the old generation, so the translation should be to only do 
one call to the old generation. No work should be done for the young 
generation.


Thanks,
Bengt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20130814/f1ec704f/attachment.htm>


More information about the hotspot-gc-dev mailing list