< prev index next >

src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp

Print this page




5228 
5229   // This is the point where the entire marking should have completed.
5230   verify_work_stacks_empty();
5231 
5232   {
5233     GCTraceTime(Debug, gc, phases) t("Weak Processing", _gc_timer_cm);
5234     WeakProcessor::weak_oops_do(&_is_alive_closure, &do_nothing_cl);
5235   }
5236 
5237   if (should_unload_classes()) {
5238     {
5239       GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer_cm);
5240 
5241       // Unload classes and purge the SystemDictionary.
5242       bool purged_class = SystemDictionary::do_unloading(&_is_alive_closure, _gc_timer_cm);
5243 
5244       // Unload nmethods.
5245       CodeCache::do_unloading(&_is_alive_closure, purged_class);
5246 
5247       // Prune dead klasses from subklass/sibling/implementor lists.
5248       Klass::clean_weak_klass_links();
5249     }
5250 
5251     {
5252       GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", _gc_timer_cm);
5253       // Clean up unreferenced symbols in symbol table.
5254       SymbolTable::unlink();
5255     }
5256 
5257     {
5258       GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer_cm);
5259       // Delete entries for dead interned strings.
5260       StringTable::unlink(&_is_alive_closure);
5261     }
5262   }
5263 
5264   // Restore any preserved marks as a result of mark stack or
5265   // work queue overflow
5266   restore_preserved_marks_if_any();  // done single-threaded for now
5267 
5268   rp->set_enqueuing_is_done(true);




5228 
5229   // This is the point where the entire marking should have completed.
5230   verify_work_stacks_empty();
5231 
5232   {
5233     GCTraceTime(Debug, gc, phases) t("Weak Processing", _gc_timer_cm);
5234     WeakProcessor::weak_oops_do(&_is_alive_closure, &do_nothing_cl);
5235   }
5236 
5237   if (should_unload_classes()) {
5238     {
5239       GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer_cm);
5240 
5241       // Unload classes and purge the SystemDictionary.
5242       bool purged_class = SystemDictionary::do_unloading(&_is_alive_closure, _gc_timer_cm);
5243 
5244       // Unload nmethods.
5245       CodeCache::do_unloading(&_is_alive_closure, purged_class);
5246 
5247       // Prune dead klasses from subklass/sibling/implementor lists.
5248       Klass::clean_weak_klass_links(purged_class);
5249     }
5250 
5251     {
5252       GCTraceTime(Debug, gc, phases) t("Scrub Symbol Table", _gc_timer_cm);
5253       // Clean up unreferenced symbols in symbol table.
5254       SymbolTable::unlink();
5255     }
5256 
5257     {
5258       GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer_cm);
5259       // Delete entries for dead interned strings.
5260       StringTable::unlink(&_is_alive_closure);
5261     }
5262   }
5263 
5264   // Restore any preserved marks as a result of mark stack or
5265   // work queue overflow
5266   restore_preserved_marks_if_any();  // done single-threaded for now
5267 
5268   rp->set_enqueuing_is_done(true);


< prev index next >