< prev index next >

src/share/vm/gc/g1/g1ConcurrentMark.cpp

Print this page
rev 13328 : [mq]: webrev.0b
rev 13331 : imported patch webrev.3b
rev 13332 : [mq]: webrev.4

*** 1716,1746 **** // the number of threads involved during discovery could differ from // the number of active workers. This is OK as long as the discovered // Reference lists are balanced (see balance_all_queues() and balance_queues()). rp->set_active_mt_degree(active_workers); // Process the weak references. const ReferenceProcessorStats& stats = rp->process_discovered_references(&g1_is_alive, &g1_keep_alive, &g1_drain_mark_stack, executor, ! _gc_timer_cm); _gc_tracer_cm->report_gc_reference_stats(stats); // The do_oop work routines of the keep_alive and drain_marking_stack // oop closures will set the has_overflown flag if we overflow the // global marking stack. assert(has_overflown() || _global_mark_stack.is_empty(), "Mark stack should be empty (unless it has overflown)"); assert(rp->num_q() == active_workers, "why not"); ! rp->enqueue_discovered_references(executor); rp->verify_no_references_recorded(); assert(!rp->discovery_enabled(), "Post condition"); } if (has_overflown()) { // We can not trust g1_is_alive if the marking stack overflowed --- 1716,1752 ---- // the number of threads involved during discovery could differ from // the number of active workers. This is OK as long as the discovered // Reference lists are balanced (see balance_all_queues() and balance_queues()). rp->set_active_mt_degree(active_workers); + ReferenceProcessorPhaseTimes pt(_gc_timer_cm, rp->num_q()); + // Process the weak references. const ReferenceProcessorStats& stats = rp->process_discovered_references(&g1_is_alive, &g1_keep_alive, &g1_drain_mark_stack, executor, ! &pt); _gc_tracer_cm->report_gc_reference_stats(stats); + pt.print_all_references(); // The do_oop work routines of the keep_alive and drain_marking_stack // oop closures will set the has_overflown flag if we overflow the // global marking stack. assert(has_overflown() || _global_mark_stack.is_empty(), "Mark stack should be empty (unless it has overflown)"); assert(rp->num_q() == active_workers, "why not"); ! rp->enqueue_discovered_references(executor, &pt); rp->verify_no_references_recorded(); + + pt.print_enqueue_phase(); + assert(!rp->discovery_enabled(), "Post condition"); } if (has_overflown()) { // We can not trust g1_is_alive if the marking stack overflowed
< prev index next >