hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp
changeset 34135 317af749634b
parent 33803 d61d5830df80
child 34137 41cc1ac3e1d9
--- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp	Fri Nov 13 09:12:06 2015 +0100
+++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp	Fri Nov 13 09:28:53 2015 +0100
@@ -3561,6 +3561,9 @@
             }
           }
         }
+        assert(hrrs.n_yielded() == r->rem_set()->occupied(),
+               "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.");
@@ -3848,6 +3851,13 @@
 
         evacuation_info.set_collectionset_regions(g1_policy()->cset_region_length());
 
+        // 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_cset();
 
         assert(check_cset_fast_test(), "Inconsistency in the InCSetState table.");