< prev index next >

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

Print this page




 363         // There are only old-to-young pointers if there are objects
 364         // in the old gen.
 365         uint stripe_total = active_workers;
 366         for(uint i=0; i < stripe_total; i++) {
 367           q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
 368         }
 369       }
 370 
 371       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
 372       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
 373       // We scan the thread roots in parallel
 374       PSAddThreadRootsTaskClosure cl(q);
 375       Threads::java_threads_and_vm_thread_do(&cl);
 376       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
 377       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
 378       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
 379       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
 380       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
 381       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
 382 
 383       TaskTerminator terminator(
 384         active_workers,
 385                   (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
 386         // If active_workers can exceed 1, add a StrealTask.
 387         // PSPromotionManager::drain_stacks_depth() does not fully drain its
 388         // stacks and expects a StealTask to complete the draining if
 389         // ParallelGCThreads is > 1.
 390         if (gc_task_manager()->workers() > 1) {
 391           for (uint j = 0; j < active_workers; j++) {
 392             q->enqueue(new StealTask(terminator.terminator()));
 393           }
 394         }
 395 
 396       gc_task_manager()->execute_and_wait(q);
 397     }
 398 
 399     scavenge_midpoint.update();
 400 
 401     // Process reference objects discovered during scavenge
 402     {
 403       GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
 404 




 363         // There are only old-to-young pointers if there are objects
 364         // in the old gen.
 365         uint stripe_total = active_workers;
 366         for(uint i=0; i < stripe_total; i++) {
 367           q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
 368         }
 369       }
 370 
 371       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
 372       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
 373       // We scan the thread roots in parallel
 374       PSAddThreadRootsTaskClosure cl(q);
 375       Threads::java_threads_and_vm_thread_do(&cl);
 376       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
 377       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
 378       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
 379       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
 380       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
 381       q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
 382 
 383       TaskTerminator terminator(active_workers,

 384                                 (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
 385         // If active_workers can exceed 1, add a StrealTask.
 386         // PSPromotionManager::drain_stacks_depth() does not fully drain its
 387         // stacks and expects a StealTask to complete the draining if
 388         // ParallelGCThreads is > 1.
 389         if (gc_task_manager()->workers() > 1) {
 390           for (uint j = 0; j < active_workers; j++) {
 391             q->enqueue(new StealTask(terminator.terminator()));
 392           }
 393         }
 394 
 395       gc_task_manager()->execute_and_wait(q);
 396     }
 397 
 398     scavenge_midpoint.update();
 399 
 400     // Process reference objects discovered during scavenge
 401     {
 402       GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
 403 


< prev index next >