391
392 GCTaskQueue* q = GCTaskQueue::create();
393
394 if (!old_gen->object_space()->is_empty()) {
395 // There are only old-to-young pointers if there are objects
396 // in the old gen.
397 uint stripe_total = active_workers;
398 for(uint i=0; i < stripe_total; i++) {
399 q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
400 }
401 }
402
403 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
404 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
405 // We scan the thread roots in parallel
406 Threads::create_thread_roots_tasks(q);
407 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
408 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
409 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
410 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
411 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
412 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
413
414 ParallelTaskTerminator terminator(
415 active_workers,
416 (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
417 if (active_workers > 1) {
418 for (uint j = 0; j < active_workers; j++) {
419 q->enqueue(new StealTask(&terminator));
420 }
421 }
422
423 gc_task_manager()->execute_and_wait(q);
424 }
425
426 scavenge_midpoint.update();
427
428 // Process reference objects discovered during scavenge
429 {
430 reference_processor()->setup_policy(false); // not always_clear
|
391
392 GCTaskQueue* q = GCTaskQueue::create();
393
394 if (!old_gen->object_space()->is_empty()) {
395 // There are only old-to-young pointers if there are objects
396 // in the old gen.
397 uint stripe_total = active_workers;
398 for(uint i=0; i < stripe_total; i++) {
399 q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total));
400 }
401 }
402
403 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe));
404 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles));
405 // We scan the thread roots in parallel
406 Threads::create_thread_roots_tasks(q);
407 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer));
408 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler));
409 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management));
410 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary));
411 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
412 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jvmti));
413 q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::code_cache));
414
415 ParallelTaskTerminator terminator(
416 active_workers,
417 (TaskQueueSetSuper*) promotion_manager->stack_array_depth());
418 if (active_workers > 1) {
419 for (uint j = 0; j < active_workers; j++) {
420 q->enqueue(new StealTask(&terminator));
421 }
422 }
423
424 gc_task_manager()->execute_and_wait(q);
425 }
426
427 scavenge_midpoint.update();
428
429 // Process reference objects discovered during scavenge
430 {
431 reference_processor()->setup_policy(false); // not always_clear
|