< prev index next >

src/share/vm/gc_implementation/g1/concurrentMark.cpp

Print this page

        

*** 2663,2673 **** G1CMTraceTime trace("Finalize Marking", G1Log::finer()); g1h->ensure_parsability(false); - StrongRootsScope srs; // this is remark, so we'll use up all active threads uint active_workers = g1h->workers()->active_workers(); if (active_workers == 0) { assert(active_workers > 0, "Should have been set earlier"); active_workers = (uint) ParallelGCThreads; --- 2663,2672 ----
*** 2677,2693 **** --- 2676,2696 ---- // Leave _parallel_marking_threads at it's // value originally calculated in the ConcurrentMark // constructor and pass values of the active workers // through the gang in the task. + { + StrongRootsScope srs(active_workers); + CMRemarkTask remarkTask(this, active_workers); // We will start all available threads, even if we decide that the // active_workers will be fewer. The extra ones will just bail out // immediately. g1h->set_par_threads(active_workers); g1h->workers()->run_task(&remarkTask); g1h->set_par_threads(0); + } SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); guarantee(has_overflown() || satb_mq_set.completed_buffers_num() == 0, err_msg("Invariant: has_overflown = %s, num buffers = %d",
< prev index next >