mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +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();
|
||||
|
||||
verify_after_gc();
|
||||
|
||||
assert(!ref_processor_stw()->discovery_enabled(), "Postcondition");
|
||||
ref_processor_stw()->verify_no_references_recorded();
|
||||
|
||||
|
@ -1521,6 +1519,8 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
|
|||
_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();
|
||||
|
|
|
@ -736,7 +736,7 @@ void G1RemSet::print_summary_info(G1RemSetSummary * summary, const char * header
|
|||
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()) {
|
||||
|
|
|
@ -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 " \
|
||||
"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)
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ public:
|
|||
_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 &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue