< prev index next >

src/share/vm/gc/g1/concurrentMarkThread.cpp

Print this page

        

*** 24,39 **** #include "precompiled.hpp" #include "gc/g1/concurrentMarkThread.inline.hpp" #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1CollectorPolicy.hpp" - #include "gc/g1/g1Log.hpp" #include "gc/g1/g1MMUTracker.hpp" #include "gc/g1/suspendibleThreadSet.hpp" #include "gc/g1/vm_operations_g1.hpp" #include "gc/shared/gcId.hpp" #include "gc/shared/gcTrace.hpp" #include "memory/resourceArea.hpp" #include "runtime/vmThread.hpp" // ======= Concurrent Mark Thread ======== --- 24,39 ---- #include "precompiled.hpp" #include "gc/g1/concurrentMarkThread.inline.hpp" #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1CollectorPolicy.hpp" #include "gc/g1/g1MMUTracker.hpp" #include "gc/g1/suspendibleThreadSet.hpp" #include "gc/g1/vm_operations_g1.hpp" #include "gc/shared/gcId.hpp" #include "gc/shared/gcTrace.hpp" + #include "logging/log.hpp" #include "memory/resourceArea.hpp" #include "runtime/vmThread.hpp" // ======= Concurrent Mark Thread ========
*** 76,99 **** void do_void(){ _cm->cleanup(); } }; - // We want to avoid that the logging from the concurrent thread is mixed - // with the logging from a STW GC. So, if necessary join the STS to ensure - // that the logging is done either before or after the STW logging. - void ConcurrentMarkThread::cm_log(bool doit, bool join_sts, const char* fmt, ...) { - if (doit) { - SuspendibleThreadSetJoiner sts_joiner(join_sts); - va_list args; - va_start(args, fmt); - gclog_or_tty->gclog_stamp(); - gclog_or_tty->vprint_cr(fmt, args); - va_end(args); - } - } - // Marking pauses can be scheduled flexibly, so we might delay marking to meet MMU. void ConcurrentMarkThread::delay_to_keep_mmu(G1CollectorPolicy* g1_policy, bool remark) { if (g1_policy->adaptive_young_list_length()) { double now = os::elapsedTime(); double prediction_ms = remark ? g1_policy->predict_remark_time_ms() --- 76,85 ----
*** 142,152 **** if (!cm()->has_aborted()) { _cm->scanRootRegions(); } double mark_start_sec = os::elapsedTime(); ! cm_log(G1Log::fine(), true, "[GC concurrent-mark-start]"); int iter = 0; do { iter++; if (!cm()->has_aborted()) { --- 128,138 ---- if (!cm()->has_aborted()) { _cm->scanRootRegions(); } double mark_start_sec = os::elapsedTime(); ! log_info(gc)("GC concurrent-mark-start"); int iter = 0; do { iter++; if (!cm()->has_aborted()) {
*** 157,175 **** double mark_end_sec = os::elapsedTime(); _vtime_mark_accum += (mark_end_time - cycle_start); if (!cm()->has_aborted()) { delay_to_keep_mmu(g1_policy, true /* remark */); ! cm_log(G1Log::fine(), true, "[GC concurrent-mark-end, %1.7lf secs]", mark_end_sec - mark_start_sec); CMCheckpointRootsFinalClosure final_cl(_cm); VM_CGC_Operation op(&final_cl, "GC remark", true /* needs_pll */); VMThread::execute(&op); } if (cm()->restart_for_overflow()) { ! cm_log(G1TraceMarkStackOverflow, true, "Restarting conc marking because of MS overflow in remark (restart #%d).", iter); ! cm_log(G1Log::fine(), true, "[GC concurrent-mark-restart-for-overflow]"); } } while (cm()->restart_for_overflow()); double end_time = os::elapsedVTime(); // Update the total virtual time before doing this, since it will try --- 143,161 ---- double mark_end_sec = os::elapsedTime(); _vtime_mark_accum += (mark_end_time - cycle_start); if (!cm()->has_aborted()) { delay_to_keep_mmu(g1_policy, true /* remark */); ! log_info(gc)("GC concurrent-mark-end, %1.7lf secs", mark_end_sec - mark_start_sec); CMCheckpointRootsFinalClosure final_cl(_cm); VM_CGC_Operation op(&final_cl, "GC remark", true /* needs_pll */); VMThread::execute(&op); } if (cm()->restart_for_overflow()) { ! log_debug(gc)("Restarting conc marking because of MS overflow in remark (restart #%d).", iter); ! log_info(gc)("GC concurrent-mark-restart-for-overflow"); } } while (cm()->restart_for_overflow()); double end_time = os::elapsedVTime(); // Update the total virtual time before doing this, since it will try
*** 200,210 **** // case they are needed by the pause. If a Full GC takes // place, it would wait for us to process the regions // reclaimed by cleanup. double cleanup_start_sec = os::elapsedTime(); ! cm_log(G1Log::fine(), false, "[GC concurrent-cleanup-start]"); // Now do the concurrent cleanup operation. _cm->completeCleanup(); // Notify anyone who's waiting that there are no more free --- 186,196 ---- // case they are needed by the pause. If a Full GC takes // place, it would wait for us to process the regions // reclaimed by cleanup. double cleanup_start_sec = os::elapsedTime(); ! log_info(gc)("GC concurrent-cleanup-start"); // Now do the concurrent cleanup operation. _cm->completeCleanup(); // Notify anyone who's waiting that there are no more free
*** 217,227 **** // while it's trying to join the STS, which is conditional on // the GC workers finishing. g1h->reset_free_regions_coming(); double cleanup_end_sec = os::elapsedTime(); ! cm_log(G1Log::fine(), true, "[GC concurrent-cleanup-end, %1.7lf secs]", cleanup_end_sec - cleanup_start_sec); } guarantee(cm()->cleanup_list_is_empty(), "at this point there should be no regions on the cleanup list"); // There is a tricky race before recording that the concurrent --- 203,213 ---- // while it's trying to join the STS, which is conditional on // the GC workers finishing. g1h->reset_free_regions_coming(); double cleanup_end_sec = os::elapsedTime(); ! log_info(gc)("GC concurrent-cleanup-end, %1.7lf secs", cleanup_end_sec - cleanup_start_sec); } guarantee(cm()->cleanup_list_is_empty(), "at this point there should be no regions on the cleanup list"); // There is a tricky race before recording that the concurrent
*** 251,261 **** { SuspendibleThreadSetJoiner sts_join; if (!cm()->has_aborted()) { g1_policy->record_concurrent_mark_cleanup_completed(); } else { ! cm_log(G1Log::fine(), false, "[GC concurrent-mark-abort]"); } } // We now want to allow clearing of the marking bitmap to be // suspended by a collection pause. --- 237,247 ---- { SuspendibleThreadSetJoiner sts_join; if (!cm()->has_aborted()) { g1_policy->record_concurrent_mark_cleanup_completed(); } else { ! log_info(gc)("GC concurrent-mark-abort"); } } // We now want to allow clearing of the marking bitmap to be // suspended by a collection pause.
< prev index next >