< prev index next >

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

Print this page




 518     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
 519   }
 520 
 521   // Flush marking stack.
 522   follow_stack();
 523 
 524   // Process reference objects found during marking
 525   {
 526     GCTraceTime(Debug, gc, phases) t("Reference Processing", _gc_timer);
 527 
 528     ref_processor()->setup_policy(clear_all_softrefs);
 529     const ReferenceProcessorStats& stats =
 530       ref_processor()->process_discovered_references(
 531         is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer);
 532     gc_tracer()->report_gc_reference_stats(stats);
 533   }
 534 
 535   // This is the point where the entire marking should have completed.
 536   assert(_marking_stack.is_empty(), "Marking should have completed");
 537 
 538   {
 539     GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer);
 540 
 541     // Unload classes and purge the SystemDictionary.
 542     bool purged_class = SystemDictionary::do_unloading(is_alive_closure());
 543 
 544     // Unload nmethods.
 545     CodeCache::do_unloading(is_alive_closure(), purged_class);
 546 
 547     // Prune dead klasses from subklass/sibling/implementor lists.
 548     Klass::clean_weak_klass_links(is_alive_closure());
 549   }
 550 
 551   {
 552     GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer);
 553     // Delete entries for dead interned strings.
 554     StringTable::unlink(is_alive_closure());
 555   }
 556 
 557   {
 558     GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", _gc_timer);




 518     //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure()));
 519   }
 520 
 521   // Flush marking stack.
 522   follow_stack();
 523 
 524   // Process reference objects found during marking
 525   {
 526     GCTraceTime(Debug, gc, phases) t("Reference Processing", _gc_timer);
 527 
 528     ref_processor()->setup_policy(clear_all_softrefs);
 529     const ReferenceProcessorStats& stats =
 530       ref_processor()->process_discovered_references(
 531         is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer);
 532     gc_tracer()->report_gc_reference_stats(stats);
 533   }
 534 
 535   // This is the point where the entire marking should have completed.
 536   assert(_marking_stack.is_empty(), "Marking should have completed");
 537 
 538   if (ClassUnloading) {
 539     GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer);
 540 
 541     // Unload classes and purge the SystemDictionary.
 542     bool purged_class = SystemDictionary::do_unloading(is_alive_closure());
 543 
 544     // Unload nmethods.
 545     CodeCache::do_unloading(is_alive_closure(), purged_class);
 546 
 547     // Prune dead klasses from subklass/sibling/implementor lists.
 548     Klass::clean_weak_klass_links(is_alive_closure());
 549   }
 550 
 551   {
 552     GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer);
 553     // Delete entries for dead interned strings.
 554     StringTable::unlink(is_alive_closure());
 555   }
 556 
 557   {
 558     GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", _gc_timer);


< prev index next >