src/share/vm/gc/g1/g1CollectedHeap.cpp

Print this page

        

@@ -3636,10 +3636,21 @@
 
   // Finally flush all remembered set entries to re-check into the global DCQS.
   cl.flush_rem_set_entries();
 }
 
+class VerifyRegionRSetClosure : public HeapRegionClosure {
+public:
+  bool doHeapRegion(HeapRegion* hr) {
+    if (!hr->is_archive() && !hr->is_continues_humongous()) {
+      bool dummy = false;
+      hr->verifyRSet(VerifyOption_G1UsePrevMarking, &dummy);
+    }
+    return false;
+  }
+};
+
 #ifdef ASSERT
 class VerifyCSetClosure: public HeapRegionClosure {
 public:
   bool doHeapRegion(HeapRegion* hr) {
     // Here we check that the CSet region's RSet is ready for parallel

@@ -4044,10 +4055,16 @@
         // during concurrent refinement. So we don't need the
         // is_gc_active() check to decided which top to use when
         // scanning cards (see CR 7039627).
         increment_gc_time_stamp();
 
+        if (G1VerifyRSetsAfterEvacuationPause) {
+          gclog_or_tty->print("[Verifying RSets]");
+          VerifyRegionRSetClosure v_cl;
+          heap_region_iterate(&v_cl);
+        }
+
         verify_after_gc();
         check_bitmaps("GC End");
 
         assert(!ref_processor_stw()->discovery_enabled(), "Postcondition");
         ref_processor_stw()->verify_no_references_recorded();