RFR(S): 8004816: G1: Kitchensink failures after marking stack changes
John Cuthbertson
john.cuthbertson at oracle.com
Thu Dec 13 17:45:41 UTC 2012
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