Request for review (S): 7039089 G1: changeset for 7037276 broke heap verification, and related cleanups
Y. Srinivas Ramakrishna
y.s.ramakrishna at oracle.com
Sat Apr 23 20:49:36 UTC 2011
http://cr.openjdk.java.net/~ysr/7039089/webrev.00/
The problem was that G1 was calling process_strong_roots()
with collecting_perm_gen option set to false, so the
closure would be used to scan the younger refs in
the perm gen. However, this was not preceded in this case
by a save_marks() call, so that if save_marks() had been
done earlier and the perm gen had been resized subsequently,
we could end up trying to scan non-existent cards in the
card table.
Changed options to process_strong_root() so we
pass "collecting_perm_gen" == true, and
appropriate class scanning options.
This also allowed us to get rid of the subsequent
invalidation of the perm gen cards which would otherwise
have been cleared by the younger refs iteration code.
Add an assertion in non_clean_cards_iterate_possibly_parallel()
to catch such an issue and provide a more informative
message.
I also noticed that some of the obsoleted code related to
the scanning of oops in the symbol table had not been
removed when symbols emigrated out of the Java heap. I removed
that obsolete code and references to it in the documentation/comments.
Allowed VerifyBeforeExit heap verification to be more verbose
either of PrintGCDetails is enabled or if Verbose is enabled.
Testing: the failing test (LoadUnloadGC2), specjvm with
heap verification enabled, refworkload with heap verification
enabled and (ongoing) JPRT with and without heap verification
enabled.
Thanks for your reviews.
-- ramki
More information about the hotspot-gc-dev
mailing list