< prev index next >

src/hotspot/share/gc/g1/g1HeapVerifier.cpp

Print this page
rev 48019 : 8191821: Finer granularity for GC verification
Reviewed-by:

*** 374,383 **** --- 374,411 ---- _failures = true; } } }; + void G1HeapVerifier::parse_verification_type(const char* type) { + if (strcmp(type, "young") == 0) { + enable_verification_type(G1VerifyYoung); + } else if (strcmp(type, "mixed") == 0) { + enable_verification_type(G1VerifyMixed); + } else if (strcmp(type, "remark") == 0) { + enable_verification_type(G1VerifyRemark); + } else if (strcmp(type, "cleanup") == 0) { + enable_verification_type(G1VerifyCleanup); + } else if (strcmp(type, "full") == 0) { + enable_verification_type(G1VerifyFull); + } else { + log_warning(gc, verify)("VerifyGCType: '%s' is unknown. Available are: young, mixed, remark, cleanup and full ", type); + } + } + + void G1HeapVerifier::enable_verification_type(G1VerifyType type) { + // First enable will clear _types. + if (_enabled_verification_types == G1VerifyAll) { + _enabled_verification_types = type; + } else { + _enabled_verification_types |= type; + } + } + + bool G1HeapVerifier::should_verify(G1VerifyType type) { + return (_enabled_verification_types & type) == type; + } void G1HeapVerifier::verify(VerifyOption vo) { if (!SafepointSynchronize::is_at_safepoint()) { log_info(gc, verify)("Skipping verification. Not at safepoint."); }
*** 539,570 **** if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) { _g1h->ensure_parsability(false); } } ! double G1HeapVerifier::verify(bool guard, const char* msg) { double verify_time_ms = 0.0; ! if (guard && _g1h->total_collections() >= VerifyGCStartAt) { double verify_start = os::elapsedTime(); HandleMark hm; // Discard invalid handles created during verification prepare_for_verify(); ! Universe::verify(VerifyOption_G1UsePrevMarking, msg); verify_time_ms = (os::elapsedTime() - verify_start) * 1000; } return verify_time_ms; } ! void G1HeapVerifier::verify_before_gc() { ! double verify_time_ms = verify(VerifyBeforeGC, "Before GC"); _g1h->g1_policy()->phase_times()->record_verify_before_time_ms(verify_time_ms); } ! void G1HeapVerifier::verify_after_gc() { ! double verify_time_ms = verify(VerifyAfterGC, "After GC"); _g1h->g1_policy()->phase_times()->record_verify_after_time_ms(verify_time_ms); } #ifndef PRODUCT class G1VerifyCardTableCleanup: public HeapRegionClosure { --- 567,602 ---- if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) { _g1h->ensure_parsability(false); } } ! double G1HeapVerifier::verify(G1VerifyType type, VerifyOption vo, const char* msg) { double verify_time_ms = 0.0; ! if (should_verify(type) && _g1h->total_collections() >= VerifyGCStartAt) { double verify_start = os::elapsedTime(); HandleMark hm; // Discard invalid handles created during verification prepare_for_verify(); ! Universe::verify(vo, msg); verify_time_ms = (os::elapsedTime() - verify_start) * 1000; } return verify_time_ms; } ! void G1HeapVerifier::verify_before_gc(G1VerifyType type) { ! if (VerifyBeforeGC) { ! double verify_time_ms = verify(type, VerifyOption_G1UsePrevMarking, "Before GC"); _g1h->g1_policy()->phase_times()->record_verify_before_time_ms(verify_time_ms); + } } ! void G1HeapVerifier::verify_after_gc(G1VerifyType type) { ! if (VerifyAfterGC) { ! double verify_time_ms = verify(type, VerifyOption_G1UsePrevMarking, "After GC"); _g1h->g1_policy()->phase_times()->record_verify_after_time_ms(verify_time_ms); + } } #ifndef PRODUCT class G1VerifyCardTableCleanup: public HeapRegionClosure {
< prev index next >