mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
8015244: G1: Verification after a full GC is incorrectly placed
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
This commit is contained in:
parent
54964edefa
commit
c3d6abc4e1
4 changed files with 9 additions and 5 deletions
|
@ -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,
|
||||||
_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
|
||||||
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 @@
|
||||||
\
|
\
|
||||||
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:
|
||||||
_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 &&
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue