< prev index next >

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

Print this page

        

*** 532,554 **** } // This is the point where the entire marking should have completed. assert(_marking_stack.is_empty(), "Marking should have completed"); ! { GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer); // Unload classes and purge the SystemDictionary. bool purged_class = SystemDictionary::do_unloading(is_alive_closure()); // Unload nmethods. CodeCache::do_unloading(is_alive_closure(), purged_class); // Prune dead klasses from subklass/sibling/implementor lists. Klass::clean_weak_klass_links(is_alive_closure()); } { GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer); // Delete entries for dead interned strings. StringTable::unlink(is_alive_closure()); } --- 532,559 ---- } // This is the point where the entire marking should have completed. assert(_marking_stack.is_empty(), "Marking should have completed"); ! if (ClassUnloading) { GCTraceTime(Debug, gc, phases) t("Class Unloading", _gc_timer); // Unload classes and purge the SystemDictionary. bool purged_class = SystemDictionary::do_unloading(is_alive_closure()); // Unload nmethods. CodeCache::do_unloading(is_alive_closure(), purged_class); // Prune dead klasses from subklass/sibling/implementor lists. Klass::clean_weak_klass_links(is_alive_closure()); + } else { + // Unload nmethods. + GCTraceTime(Debug, gc, phases) t("NMethod Unloading", _gc_timer); + CodeCache::do_unloading(is_alive_closure(), false); } + { GCTraceTime(Debug, gc, phases) t("Scrub String Table", _gc_timer); // Delete entries for dead interned strings. StringTable::unlink(is_alive_closure()); }
< prev index next >