2104
2105 ReferenceProcessorStats stats;
2106 ReferenceProcessorPhaseTimes pt(&_gc_timer, ref_processor()->num_q());
2107 if (ref_processor()->processing_is_mt()) {
2108 RefProcTaskExecutor task_executor;
2109 stats = ref_processor()->process_discovered_references(
2110 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure,
2111 &task_executor, &pt);
2112 } else {
2113 stats = ref_processor()->process_discovered_references(
2114 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL,
2115 &pt);
2116 }
2117
2118 gc_tracer->report_gc_reference_stats(stats);
2119 pt.print_all_references();
2120 }
2121
2122 {
2123 GCTraceTime(Debug, gc, phases) tm("Weak Processing", &_gc_timer);
2124 WeakProcessor::unlink_or_oops_do(is_alive_closure(), &mark_and_push_closure, &follow_stack_closure);
2125 }
2126
2127 // This is the point where the entire marking should have completed.
2128 assert(cm->marking_stacks_empty(), "Marking should have completed");
2129
2130 {
2131 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer);
2132
2133 // Follow system dictionary roots and unload classes.
2134 bool purged_class = SystemDictionary::do_unloading(is_alive_closure(), &_gc_timer);
2135
2136 // Unload nmethods.
2137 CodeCache::do_unloading(is_alive_closure(), purged_class);
2138
2139 // Prune dead klasses from subklass/sibling/implementor lists.
2140 Klass::clean_weak_klass_links(is_alive_closure());
2141 }
2142
2143 {
2144 GCTraceTime(Debug, gc, phases) t("Scrub String Table", &_gc_timer);
|
2104
2105 ReferenceProcessorStats stats;
2106 ReferenceProcessorPhaseTimes pt(&_gc_timer, ref_processor()->num_q());
2107 if (ref_processor()->processing_is_mt()) {
2108 RefProcTaskExecutor task_executor;
2109 stats = ref_processor()->process_discovered_references(
2110 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure,
2111 &task_executor, &pt);
2112 } else {
2113 stats = ref_processor()->process_discovered_references(
2114 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL,
2115 &pt);
2116 }
2117
2118 gc_tracer->report_gc_reference_stats(stats);
2119 pt.print_all_references();
2120 }
2121
2122 {
2123 GCTraceTime(Debug, gc, phases) tm("Weak Processing", &_gc_timer);
2124 WeakProcessor::weak_oops_do(is_alive_closure(), &mark_and_push_closure, &follow_stack_closure);
2125 }
2126
2127 // This is the point where the entire marking should have completed.
2128 assert(cm->marking_stacks_empty(), "Marking should have completed");
2129
2130 {
2131 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer);
2132
2133 // Follow system dictionary roots and unload classes.
2134 bool purged_class = SystemDictionary::do_unloading(is_alive_closure(), &_gc_timer);
2135
2136 // Unload nmethods.
2137 CodeCache::do_unloading(is_alive_closure(), purged_class);
2138
2139 // Prune dead klasses from subklass/sibling/implementor lists.
2140 Klass::clean_weak_klass_links(is_alive_closure());
2141 }
2142
2143 {
2144 GCTraceTime(Debug, gc, phases) t("Scrub String Table", &_gc_timer);
|