< 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 >