< prev index next >

src/share/vm/gc/cms/parNewGeneration.cpp

Print this page

        

*** 925,959 **** age_table()->clear(); to()->clear(SpaceDecorator::Mangle); gch->save_marks(); - assert(workers != NULL, "Need parallel worker threads."); - uint n_workers = active_workers; // Set the correct parallelism (number of queues) in the reference processor ! ref_processor()->set_active_mt_degree(n_workers); // Always set the terminator for the active number of workers // because only those workers go through the termination protocol. ! ParallelTaskTerminator _term(n_workers, task_queues()); ! ParScanThreadStateSet thread_state_set(workers->active_workers(), *to(), *this, *_old_gen, *task_queues(), _overflow_stacks, desired_plab_sz(), _term); ! thread_state_set.reset(n_workers, promotion_failed()); { ! StrongRootsScope srs(n_workers); ParNewGenTask tsk(this, _old_gen, reserved().end(), &thread_state_set, &srs); gch->rem_set()->prepare_for_younger_refs_iterate(true); // It turns out that even when we're using 1 thread, doing the work in a // separate thread causes wide variance in run times. We can't help this // in the multi-threaded case, but we special-case n=1 here to get // repeatable measurements of the 1-thread overhead of the parallel code. ! if (n_workers > 1) { workers->run_task(&tsk); } else { tsk.work(0); } } --- 925,957 ---- age_table()->clear(); to()->clear(SpaceDecorator::Mangle); gch->save_marks(); // Set the correct parallelism (number of queues) in the reference processor ! ref_processor()->set_active_mt_degree(active_workers); // Always set the terminator for the active number of workers // because only those workers go through the termination protocol. ! ParallelTaskTerminator _term(active_workers, task_queues()); ! ParScanThreadStateSet thread_state_set(active_workers, *to(), *this, *_old_gen, *task_queues(), _overflow_stacks, desired_plab_sz(), _term); ! thread_state_set.reset(active_workers, promotion_failed()); { ! StrongRootsScope srs(active_workers); ParNewGenTask tsk(this, _old_gen, reserved().end(), &thread_state_set, &srs); gch->rem_set()->prepare_for_younger_refs_iterate(true); // It turns out that even when we're using 1 thread, doing the work in a // separate thread causes wide variance in run times. We can't help this // in the multi-threaded case, but we special-case n=1 here to get // repeatable measurements of the 1-thread overhead of the parallel code. ! if (active_workers > 1) { workers->run_task(&tsk); } else { tsk.work(0); } }
*** 1022,1032 **** // set new iteration safe limit for the survivor spaces from()->set_concurrent_iteration_safe_limit(from()->top()); to()->set_concurrent_iteration_safe_limit(to()->top()); if (ResizePLAB) { ! plab_stats()->adjust_desired_plab_sz(n_workers); } if (PrintGC && !PrintGCDetails) { gch->print_heap_change(gch_prev_used); } --- 1020,1030 ---- // set new iteration safe limit for the survivor spaces from()->set_concurrent_iteration_safe_limit(from()->top()); to()->set_concurrent_iteration_safe_limit(to()->top()); if (ResizePLAB) { ! plab_stats()->adjust_desired_plab_sz(active_workers); } if (PrintGC && !PrintGCDetails) { gch->print_heap_change(gch_prev_used); }
< prev index next >