void StealTask::do_it(GCTaskManager* manager, uint which) { assert(ParallelScavengeHeap::heap()->is_gc_active(), "called outside gc"); PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which); pm->drain_stacks(true); guarantee(pm->stacks_empty(), "stacks should be empty at this point"); int random_seed = 17; while(true) { StarTask p; if (PSPromotionManager::steal_depth(which, &random_seed, p)) { TASKQUEUE_STATS_ONLY(pm->record_steal(p)); pm->process_popped_location_depth(p); pm->drain_stacks_depth(true); } else { if (terminator()->offer_termination()) { break; } } } guarantee(pm->stacks_empty(), "stacks should be empty at this point"); }
void do_void() { assert(_promotion_manager != NULL, "Sanity"); _promotion_manager->drain_stacks(true); guarantee(_promotion_manager->stacks_empty(), "stacks should be empty at this point"); }