< prev index next >

src/share/vm/gc/parallel/psScavenge.cpp

Print this page
rev 11459 : create_thread_failed: fix errors from thread creation failures


 374         for(uint i=0; i < stripe_total; i++) {
 375           q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
 376         }
 377       }
 378 
 379       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
 380       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
 381       // We scan the thread roots in parallel
 382       Threads::create_thread_roots_tasks(q);
 383       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
 384       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
 385       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
 386       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
 387       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
 388       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
 389       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
 390 
 391       ParallelTaskTerminator terminator(
 392         active_workers,
 393                   (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
 394       if (active_workers > 1) {




 395         for (uint j = 0; j < active_workers; j++) {
 396           q->enqueue(new StealTask(&terminator));
 397         }
 398       }
 399 
 400       gc_task_manager()->execute_and_wait(q);
 401     }
 402 
 403     scavenge_midpoint.update();
 404 
 405     // Process reference objects discovered during scavenge
 406     {
 407       GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
 408 
 409       reference_processor()->setup_policy(false); // not always_clear
 410       reference_processor()->set_active_mt_degree(active_workers);
 411       PSKeepAliveClosure keep_alive(promotion_manager);
 412       PSEvacuateFollowersClosure evac_followers(promotion_manager);
 413       ReferenceProcessorStats stats;
 414       if (reference_processor()->processing_is_mt()) {




 374         for(uint i=0; i < stripe_total; i++) {
 375           q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
 376         }
 377       }
 378 
 379       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
 380       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
 381       // We scan the thread roots in parallel
 382       Threads::create_thread_roots_tasks(q);
 383       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
 384       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
 385       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
 386       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
 387       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
 388       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
 389       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
 390 
 391       ParallelTaskTerminator terminator(
 392         active_workers,
 393                   (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
 394         // If active_workers can exceed 1, add a StrealTask.
 395         // PSPromotionManager::drain_stacks_depth() does not fully drain its
 396         // stacks and expects a StealTask to complete the draining if
 397         // ParallelGCThreads is > 1.
 398         if (gc_task_manager()->workers() > 1) {
 399           for (uint j = 0; j < active_workers; j++) {
 400             q->enqueue(new StealTask(&terminator));
 401           }
 402         }
 403 
 404       gc_task_manager()->execute_and_wait(q);
 405     }
 406 
 407     scavenge_midpoint.update();
 408 
 409     // Process reference objects discovered during scavenge
 410     {
 411       GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
 412 
 413       reference_processor()->setup_policy(false); // not always_clear
 414       reference_processor()->set_active_mt_degree(active_workers);
 415       PSKeepAliveClosure keep_alive(promotion_manager);
 416       PSEvacuateFollowersClosure evac_followers(promotion_manager);
 417       ReferenceProcessorStats stats;
 418       if (reference_processor()->processing_is_mt()) {


< prev index next >