提交 e6684fe0 编写于 作者: J johnc

8015244: G1: Verification after a full GC is incorrectly placed.

Summary: In a full GC, move the verification after the GC to after RSet rebuilding. Verify RSet entries during a full GC under control of a flag.
Reviewed-by: tschatzl, brutisso
上级 1c4e2ca8
...@@ -1417,8 +1417,6 @@ bool G1CollectedHeap::do_collection(bool explicit_gc, ...@@ -1417,8 +1417,6 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
MemoryService::track_memory_usage(); MemoryService::track_memory_usage();
verify_after_gc();
assert(!ref_processor_stw()->discovery_enabled(), "Postcondition"); assert(!ref_processor_stw()->discovery_enabled(), "Postcondition");
ref_processor_stw()->verify_no_references_recorded(); ref_processor_stw()->verify_no_references_recorded();
...@@ -1521,6 +1519,8 @@ bool G1CollectedHeap::do_collection(bool explicit_gc, ...@@ -1521,6 +1519,8 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
_hrs.verify_optional(); _hrs.verify_optional();
verify_region_sets_optional(); verify_region_sets_optional();
verify_after_gc();
// Start a new incremental collection set for the next pause // Start a new incremental collection set for the next pause
assert(g1_policy()->collection_set() == NULL, "must be"); assert(g1_policy()->collection_set() == NULL, "must be");
g1_policy()->start_incremental_cset_building(); g1_policy()->start_incremental_cset_building();
......
...@@ -736,7 +736,7 @@ void G1RemSet::print_summary_info(G1RemSetSummary * summary, const char * header ...@@ -736,7 +736,7 @@ void G1RemSet::print_summary_info(G1RemSetSummary * summary, const char * header
void G1RemSet::prepare_for_verify() { void G1RemSet::prepare_for_verify() {
if (G1HRRSFlushLogBuffersOnVerify && if (G1HRRSFlushLogBuffersOnVerify &&
(VerifyBeforeGC || VerifyAfterGC) (VerifyBeforeGC || VerifyAfterGC)
&& !_g1->full_collection()) { && (!_g1->full_collection() || G1VerifyRSetsDuringFullGC)) {
cleanupHRRS(); cleanupHRRS();
_g1->set_refine_cte_cl_concurrency(false); _g1->set_refine_cte_cl_concurrency(false);
if (SafepointSynchronize::is_at_safepoint()) { if (SafepointSynchronize::is_at_safepoint()) {
......
...@@ -329,7 +329,11 @@ ...@@ -329,7 +329,11 @@
\ \
develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \ develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \
"Force use of evacuation failure handling during mixed " \ "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 " \
"remembered set when verifying 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) 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)
......
...@@ -139,7 +139,7 @@ public: ...@@ -139,7 +139,7 @@ public:
_n_failures++; _n_failures++;
} }
if (!_g1h->full_collection()) { if (!_g1h->full_collection() || G1VerifyRSetsDuringFullGC) {
HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
HeapRegion* to = _g1h->heap_region_containing(obj); HeapRegion* to = _g1h->heap_region_containing(obj);
if (from != NULL && to != NULL && if (from != NULL && to != NULL &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册