< prev index next >

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

Print this page




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


< prev index next >