--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2013-05-22 16:02:17.595959706 -0700 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2013-05-22 16:02:17.371644903 -0700 @@ -1417,8 +1417,6 @@ MemoryService::track_memory_usage(); - verify_after_gc(); - assert(!ref_processor_stw()->discovery_enabled(), "Postcondition"); ref_processor_stw()->verify_no_references_recorded(); @@ -1521,6 +1519,8 @@ _hrs.verify_optional(); verify_region_sets_optional(); + verify_after_gc(); + // Start a new incremental collection set for the next pause assert(g1_policy()->collection_set() == NULL, "must be"); g1_policy()->start_incremental_cset_building(); --- old/src/share/vm/gc_implementation/g1/g1RemSet.cpp 2013-05-22 16:02:20.519494067 -0700 +++ new/src/share/vm/gc_implementation/g1/g1RemSet.cpp 2013-05-22 16:02:20.308357688 -0700 @@ -790,7 +790,7 @@ void G1RemSet::prepare_for_verify() { if (G1HRRSFlushLogBuffersOnVerify && (VerifyBeforeGC || VerifyAfterGC) - && !_g1->full_collection()) { + && (!_g1->full_collection() || G1VerifyRSetsDuringFullGC)) { cleanupHRRS(); _g1->set_refine_cte_cl_concurrency(false); if (SafepointSynchronize::is_at_safepoint()) { --- old/src/share/vm/gc_implementation/g1/g1_globals.hpp 2013-05-22 16:02:21.837578272 -0700 +++ new/src/share/vm/gc_implementation/g1/g1_globals.hpp 2013-05-22 16:02:21.620703019 -0700 @@ -329,7 +329,11 @@ \ develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \ "Force use of evacuation failure handling during mixed " \ - "evacuation pauses") + "evacuation pauses") \ + \ + diagnostic(bool, G1VerifyRSetsDuringFullGC, false, \ + "If true, perform verification of each heap region's rset " \ + "when verfiying the heap during a full GC.") G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG) --- old/src/share/vm/gc_implementation/g1/heapRegion.cpp 2013-05-22 16:02:23.026309856 -0700 +++ new/src/share/vm/gc_implementation/g1/heapRegion.cpp 2013-05-22 16:02:22.810844575 -0700 @@ -139,7 +139,7 @@ _n_failures++; } - if (!_g1h->full_collection()) { + if (!_g1h->full_collection() || G1VerifyRSetsDuringFullGC) { HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); HeapRegion* to = _g1h->heap_region_containing(obj); if (from != NULL && to != NULL &&