diff -r 88ae10297731 -r f3f2f71d2dc8 src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Jan 26 15:51:28 2015 -0800 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Jan 19 18:16:40 2016 +0000 @@ -3767,6 +3767,9 @@ _dcq.enqueue(card_ptr); } } + assert(hrrs.n_yielded() == r->rem_set()->occupied(), + err_msg("Remembered set hash maps out of sync, cur: " SIZE_FORMAT " entries, next: " SIZE_FORMAT " entries", + hrrs.n_yielded(), r->rem_set()->occupied())); r->rem_set()->clear_locked(); } assert(r->rem_set()->is_empty(), "At this point any humongous candidate remembered set must be empty."); @@ -4089,6 +4092,13 @@ g1_policy()->finalize_cset(target_pause_time_ms, evacuation_info); + // Make sure the remembered sets are up to date. This needs to be + // done before register_humongous_regions_with_cset(), because the + // remembered sets are used there to choose eager reclaim candidates. + // If the remembered sets are not up to date we might miss some + // entries that need to be handled. + g1_rem_set()->cleanupHRRS(); + register_humongous_regions_with_in_cset_fast_test(); assert(check_cset_fast_test(), "Inconsistency in the InCSetState table.");