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
|