RFR(XXS): 8017070: G1: assert(_card_counts[card_num] <= G1ConcRSHotCardLimit) failed

John Cuthbertson john.cuthbertson at oracle.com
Fri Jun 28 19:01:59 UTC 2013


Hi All,

Can I couple of volunteers review this extremely small change? The 
webrev can be found at: http://cr.openjdk.java.net/~johnc/8017070/webrev.0/

Summary:
The assert that fired is invalid. A card can be added to more than one 
update buffer since reads and writes to the card table are not atomic. 
If two threads end up refining the card at the same time then the count 
for that card can be incremented twice. If count is just below the hot 
threshold, the double increment will trip the assert. Since the card was 
enqueued by two different threads we do want the the double increment to 
more accurately reflect how hot the card is. I have removed the invalid 
assert and use a bounding expression to assign the new count value.

Testing:
Weblogic+medrec on the failing SQE machine (though I couldn't reproduce 
the original problem)
Weblogic+medrec on an Intel Haswell machine
GC test suite
jprt.

Thanks,

JohnC




More information about the hotspot-gc-dev mailing list