< prev index next >

src/share/vm/gc/serial/genMarkSweep.cpp

Print this page




 203                            ClassUnloading,
 204                            &follow_root_closure,
 205                            &follow_root_closure,
 206                            &follow_cld_closure);
 207   }
 208 
 209   // Process reference objects found during marking
 210   {
 211     GCTraceTime(Debug, gc, phases) tm_m("Reference Processing", gc_timer());
 212 
 213     ref_processor()->setup_policy(clear_all_softrefs);
 214     const ReferenceProcessorStats& stats =
 215       ref_processor()->process_discovered_references(
 216         &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer);
 217     gc_tracer()->report_gc_reference_stats(stats);
 218   }
 219 
 220   // This is the point where the entire marking should have completed.
 221   assert(_marking_stack.is_empty(), "Marking should have completed");
 222 
 223   {
 224     GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", gc_timer());
 225 
 226     // Unload classes and purge the SystemDictionary.
 227     bool purged_class = SystemDictionary::do_unloading(&is_alive);
 228 
 229     // Unload nmethods.
 230     CodeCache::do_unloading(&is_alive, purged_class);
 231 
 232     // Prune dead klasses from subklass/sibling/implementor lists.
 233     Klass::clean_weak_klass_links(&is_alive);
 234   }
 235 
 236   {
 237     GCTraceTime(Debug, gc, phases) t("Scrub String Table", gc_timer());
 238     // Delete entries for dead interned strings.
 239     StringTable::unlink(&is_alive);
 240   }
 241 
 242   {
 243     GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", gc_timer());




 203                            ClassUnloading,
 204                            &follow_root_closure,
 205                            &follow_root_closure,
 206                            &follow_cld_closure);
 207   }
 208 
 209   // Process reference objects found during marking
 210   {
 211     GCTraceTime(Debug, gc, phases) tm_m("Reference Processing", gc_timer());
 212 
 213     ref_processor()->setup_policy(clear_all_softrefs);
 214     const ReferenceProcessorStats& stats =
 215       ref_processor()->process_discovered_references(
 216         &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer);
 217     gc_tracer()->report_gc_reference_stats(stats);
 218   }
 219 
 220   // This is the point where the entire marking should have completed.
 221   assert(_marking_stack.is_empty(), "Marking should have completed");
 222 
 223   if (ClassUnloading) {
 224     GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", gc_timer());
 225 
 226     // Unload classes and purge the SystemDictionary.
 227     bool purged_class = SystemDictionary::do_unloading(&is_alive);
 228 
 229     // Unload nmethods.
 230     CodeCache::do_unloading(&is_alive, purged_class);
 231 
 232     // Prune dead klasses from subklass/sibling/implementor lists.
 233     Klass::clean_weak_klass_links(&is_alive);
 234   }
 235 
 236   {
 237     GCTraceTime(Debug, gc, phases) t("Scrub String Table", gc_timer());
 238     // Delete entries for dead interned strings.
 239     StringTable::unlink(&is_alive);
 240   }
 241 
 242   {
 243     GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", gc_timer());


< prev index next >