< prev index next >

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

Print this page




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


< prev index next >