< prev index next >

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

Print this page
rev 49831 : imported patch 8201492-properly-implement-non-contiguous-reference-processing
rev 49834 : [mq]: 8202021-cleanup-referenceprocessor


 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       }


< prev index next >