399 if (gc_task_manager()->workers() > 1) {
400 for (uint j = 0; j < active_workers; j++) {
401 q->enqueue(new StealTask(&terminator));
402 }
403 }
404
405 gc_task_manager()->execute_and_wait(q);
406 }
407
408 scavenge_midpoint.update();
409
410 // Process reference objects discovered during scavenge
411 {
412 GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
413
414 reference_processor()->setup_policy(false); // not always_clear
415 reference_processor()->set_active_mt_degree(active_workers);
416 PSKeepAliveClosure keep_alive(promotion_manager);
417 PSEvacuateFollowersClosure evac_followers(promotion_manager);
418 ReferenceProcessorStats stats;
419 ReferenceProcessorPhaseTimes pt(&_gc_timer, reference_processor()->num_q());
420 if (reference_processor()->processing_is_mt()) {
421 PSRefProcTaskExecutor task_executor;
422 stats = reference_processor()->process_discovered_references(
423 &_is_alive_closure, &keep_alive, &evac_followers, &task_executor,
424 &pt);
425 } else {
426 stats = reference_processor()->process_discovered_references(
427 &_is_alive_closure, &keep_alive, &evac_followers, NULL, &pt);
428 }
429
430 _gc_tracer.report_gc_reference_stats(stats);
431 pt.print_all_references();
432
433 // Enqueue reference objects discovered during scavenge.
434 if (reference_processor()->processing_is_mt()) {
435 PSRefProcTaskExecutor task_executor;
436 reference_processor()->enqueue_discovered_references(&task_executor, &pt);
437 } else {
438 reference_processor()->enqueue_discovered_references(NULL, &pt);
439 }
|
399 if (gc_task_manager()->workers() > 1) {
400 for (uint j = 0; j < active_workers; j++) {
401 q->enqueue(new StealTask(&terminator));
402 }
403 }
404
405 gc_task_manager()->execute_and_wait(q);
406 }
407
408 scavenge_midpoint.update();
409
410 // Process reference objects discovered during scavenge
411 {
412 GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
413
414 reference_processor()->setup_policy(false); // not always_clear
415 reference_processor()->set_active_mt_degree(active_workers);
416 PSKeepAliveClosure keep_alive(promotion_manager);
417 PSEvacuateFollowersClosure evac_followers(promotion_manager);
418 ReferenceProcessorStats stats;
419 ReferenceProcessorPhaseTimes pt(&_gc_timer, reference_processor()->num_queues());
420 if (reference_processor()->processing_is_mt()) {
421 PSRefProcTaskExecutor task_executor;
422 stats = reference_processor()->process_discovered_references(
423 &_is_alive_closure, &keep_alive, &evac_followers, &task_executor,
424 &pt);
425 } else {
426 stats = reference_processor()->process_discovered_references(
427 &_is_alive_closure, &keep_alive, &evac_followers, NULL, &pt);
428 }
429
430 _gc_tracer.report_gc_reference_stats(stats);
431 pt.print_all_references();
432
433 // Enqueue reference objects discovered during scavenge.
434 if (reference_processor()->processing_is_mt()) {
435 PSRefProcTaskExecutor task_executor;
436 reference_processor()->enqueue_discovered_references(&task_executor, &pt);
437 } else {
438 reference_processor()->enqueue_discovered_references(NULL, &pt);
439 }
|