RFR(S): 8004816: G1: Kitchensink failures after marking stack changes
Jon Masamitsu
jon.masamitsu at oracle.com
Thu Dec 13 23:12:34 UTC 2012
John,
Your fix looks good.
A small suggestion. Instead of clear_marking_state() how
about reinitialize_marking_state() or reset_marking_state()?
When I went to look at what "clear_marking_state"
did, I expected it to simply set a variable but it does
more. I thought that "reinitialize" or "reset" would
warn the reader that more was happening.
If this is in keeping with G1 naming
convention, it's fine to leave it.
Jon
On 12/13/12 09:45, John Cuthbertson wrote:
> Hi Everyone,
>
> Can I have a couple of volunteers review the fix for this CR? The
> webrev can be found at:
> http://cr.openjdk.java.net/~johnc/8004816/webrev.0/
>
> Summary:
> The reduced mark stack size that came in as part of the changes for
> 8000244 exposed this issue. If the marking stack overflowed as a
> result of pushes from the serial reference processing closures, the
> marking stack overflow flag was not cleared. When marking eventually
> completed, after the subsequent restarting, the still set overflow
> flag was detected and resulted in a guarantee failure. I also
> discovered that the actual marking state was not correctly cleared for
> restarting for such an overflow and, as a result, some referent
> objects might have been skipped by marking (those that are reachable
> from the objects we failed to push as a result of the overflow).
>
> Normally this is not a problem as the serial reference processing code
> is executed infrequently - except on systems with one or two cpus. The
> parallel reference processing closures reset the marking state
> correctly in the event of an overflow in the global marking stack.
>
> Testing:
> Kitchensink on 1 and 2 cpu systems with a very low mark stack size and
> marking verification.
>
> Thanks,
>
> JohnC
More information about the hotspot-gc-dev
mailing list