2089 GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
2090
2091 ReferenceProcessorStats stats;
2092 if (ref_processor()->processing_is_mt()) {
2093 RefProcTaskExecutor task_executor;
2094 stats = ref_processor()->process_discovered_references(
2095 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure,
2096 &task_executor, &_gc_timer);
2097 } else {
2098 stats = ref_processor()->process_discovered_references(
2099 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL,
2100 &_gc_timer);
2101 }
2102
2103 gc_tracer->report_gc_reference_stats(stats);
2104 }
2105
2106 // This is the point where the entire marking should have completed.
2107 assert(cm->marking_stacks_empty(), "Marking should have completed");
2108
2109 {
2110 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer);
2111
2112 // Follow system dictionary roots and unload classes.
2113 bool purged_class = SystemDictionary::do_unloading(is_alive_closure());
2114
2115 // Unload nmethods.
2116 CodeCache::do_unloading(is_alive_closure(), purged_class);
2117
2118 // Prune dead klasses from subklass/sibling/implementor lists.
2119 Klass::clean_weak_klass_links(is_alive_closure());
2120 }
2121
2122 {
2123 GCTraceTime(Debug, gc, phases) t("Scrub String Table", &_gc_timer);
2124 // Delete entries for dead interned strings.
2125 StringTable::unlink(is_alive_closure());
2126 }
2127
2128 {
2129 GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", &_gc_timer);
|
2089 GCTraceTime(Debug, gc, phases) tm("Reference Processing", &_gc_timer);
2090
2091 ReferenceProcessorStats stats;
2092 if (ref_processor()->processing_is_mt()) {
2093 RefProcTaskExecutor task_executor;
2094 stats = ref_processor()->process_discovered_references(
2095 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure,
2096 &task_executor, &_gc_timer);
2097 } else {
2098 stats = ref_processor()->process_discovered_references(
2099 is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL,
2100 &_gc_timer);
2101 }
2102
2103 gc_tracer->report_gc_reference_stats(stats);
2104 }
2105
2106 // This is the point where the entire marking should have completed.
2107 assert(cm->marking_stacks_empty(), "Marking should have completed");
2108
2109 if (ClassUnloading) {
2110 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer);
2111
2112 // Follow system dictionary roots and unload classes.
2113 bool purged_class = SystemDictionary::do_unloading(is_alive_closure());
2114
2115 // Unload nmethods.
2116 CodeCache::do_unloading(is_alive_closure(), purged_class);
2117
2118 // Prune dead klasses from subklass/sibling/implementor lists.
2119 Klass::clean_weak_klass_links(is_alive_closure());
2120 }
2121
2122 {
2123 GCTraceTime(Debug, gc, phases) t("Scrub String Table", &_gc_timer);
2124 // Delete entries for dead interned strings.
2125 StringTable::unlink(is_alive_closure());
2126 }
2127
2128 {
2129 GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", &_gc_timer);
|