mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 19:14: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
|
@ -250,7 +250,34 @@ void CardTableRS::younger_refs_in_space_iterate(Space* sp,
|
|||
cl->gen_boundary());
|
||||
ClearNoncleanCardWrapper clear_cl(dcto_cl, this);
|
||||
|
||||
_ct_bs->non_clean_card_iterate_possibly_parallel(sp, sp->used_region_at_save_marks(),
|
||||
const MemRegion urasm = sp->used_region_at_save_marks();
|
||||
#ifdef ASSERT
|
||||
// Convert the assertion check to a warning if we are running
|
||||
// CMS+ParNew until related bug is fixed.
|
||||
MemRegion ur = sp->used_region();
|
||||
assert(ur.contains(urasm) || (UseConcMarkSweepGC && UseParNewGC),
|
||||
err_msg("Did you forget to call save_marks()? "
|
||||
"[" PTR_FORMAT ", " PTR_FORMAT ") is not contained in "
|
||||
"[" PTR_FORMAT ", " PTR_FORMAT ")",
|
||||
urasm.start(), urasm.end(), ur.start(), ur.end()));
|
||||
// In the case of CMS+ParNew, issue a warning
|
||||
if (!ur.contains(urasm)) {
|
||||
assert(UseConcMarkSweepGC && UseParNewGC, "Tautology: see assert above");
|
||||
warning("CMS+ParNew: Did you forget to call save_marks()? "
|
||||
"[" PTR_FORMAT ", " PTR_FORMAT ") is not contained in "
|
||||
"[" PTR_FORMAT ", " PTR_FORMAT ")",
|
||||
urasm.start(), urasm.end(), ur.start(), ur.end());
|
||||
MemRegion ur2 = sp->used_region();
|
||||
MemRegion urasm2 = sp->used_region_at_save_marks();
|
||||
if (!ur.equals(ur2)) {
|
||||
warning("CMS+ParNew: Flickering used_region()!!");
|
||||
}
|
||||
if (!urasm.equals(urasm2)) {
|
||||
warning("CMS+ParNew: Flickering used_region_at_save_marks()!!");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
_ct_bs->non_clean_card_iterate_possibly_parallel(sp, urasm,
|
||||
dcto_cl, &clear_cl);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue