mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
7039089: G1: changeset for 7037276 broke heap verification, and related cleanups
In G1 heap verification, we no longer scan perm to G1-collected heap refs as part of process_strong_roots() but rather in a separate explicit oop iteration over the perm gen. This preserves the original perm card-marks. Added a new assertion in younger_refs_iterate() to catch a simple subcase where the user may have forgotten a prior save_marks() call, as happened in the case of G1's attempt to iterate perm to G1 refs when verifying the heap before exit. The assert was deliberately weakened for ParNew+CMS and will be fixed for that combination in a future CR. Also made some (non-G1) cleanups related to code and comments obsoleted by the migration of Symbols to the native heap. Reviewed-by: iveresov, jmasa, tonyp
This commit is contained in:
parent
e3121a5a43
commit
d86311b13c
8 changed files with 69 additions and 28 deletions
|
@ -2805,17 +2805,26 @@ void G1CollectedHeap::verify(bool allow_dirty,
|
|||
bool silent,
|
||||
bool use_prev_marking) {
|
||||
if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) {
|
||||
if (!silent) { gclog_or_tty->print("roots "); }
|
||||
if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); }
|
||||
VerifyRootsClosure rootsCl(use_prev_marking);
|
||||
CodeBlobToOopClosure blobsCl(&rootsCl, /*do_marking=*/ false);
|
||||
process_strong_roots(true, // activate StrongRootsScope
|
||||
false,
|
||||
SharedHeap::SO_AllClasses,
|
||||
// We apply the relevant closures to all the oops in the
|
||||
// system dictionary, the string table and the code cache.
|
||||
const int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache;
|
||||
process_strong_roots(true, // activate StrongRootsScope
|
||||
true, // we set "collecting perm gen" to true,
|
||||
// so we don't reset the dirty cards in the perm gen.
|
||||
SharedHeap::ScanningOption(so), // roots scanning options
|
||||
&rootsCl,
|
||||
&blobsCl,
|
||||
&rootsCl);
|
||||
// Since we used "collecting_perm_gen" == true above, we will not have
|
||||
// checked the refs from perm into the G1-collected heap. We check those
|
||||
// references explicitly below. Whether the relevant cards are dirty
|
||||
// is checked further below in the rem set verification.
|
||||
if (!silent) { gclog_or_tty->print("Permgen roots "); }
|
||||
perm_gen()->oop_iterate(&rootsCl);
|
||||
bool failures = rootsCl.failures();
|
||||
rem_set()->invalidate(perm_gen()->used_region(), false);
|
||||
if (!silent) { gclog_or_tty->print("HeapRegionSets "); }
|
||||
verify_region_sets();
|
||||
if (!silent) { gclog_or_tty->print("HeapRegions "); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue