< prev index next >

src/share/vm/gc/g1/g1ConcurrentMark.cpp

Print this page
rev 12506 : 8171238: Unify cleanup code used in G1 Remark and Full GC marking
Reviewed-by:
rev 12507 : [mq]: 8171238-rev-tsch

*** 1657,1670 **** // how many workers to wait for. _cm->set_concurrency(_active_workers); _workers->run_task(&enq_task_proxy); } - void G1ConcurrentMark::weakRefsWorkParallelPart(BoolObjectClosure* is_alive, bool purged_classes) { - G1CollectedHeap::heap()->parallel_cleaning(is_alive, true, true, purged_classes); - } - void G1ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) { if (has_overflown()) { // Skip processing the discovered references if we have // overflown the global marking stack. Reference objects // only get discovered once so it is OK to not --- 1657,1666 ----
*** 1773,1798 **** assert(_global_mark_stack.is_empty(), "Marking should have completed"); // Unload Klasses, String, Symbols, Code Cache, etc. if (ClassUnloadingWithConcurrentMark) { ! bool purged_classes; ! ! { ! GCTraceTime(Debug, gc, phases) trace("System Dictionary Unloading", _gc_timer_cm); ! purged_classes = SystemDictionary::do_unloading(&g1_is_alive, false /* Defer klass cleaning */); ! } ! ! { ! GCTraceTime(Debug, gc, phases) trace("Parallel Unloading", _gc_timer_cm); ! weakRefsWorkParallelPart(&g1_is_alive, purged_classes); ! } ! } - if (G1StringDedup::is_enabled()) { - GCTraceTime(Debug, gc, phases) trace("String Deduplication Unlink", _gc_timer_cm); - G1StringDedup::unlink(&g1_is_alive); } } void G1ConcurrentMark::swapMarkBitMaps() { G1CMBitMapRO* temp = _prevMarkBitMap; --- 1769,1787 ---- assert(_global_mark_stack.is_empty(), "Marking should have completed"); // Unload Klasses, String, Symbols, Code Cache, etc. if (ClassUnloadingWithConcurrentMark) { ! GCTraceTime(Debug, gc, phases) debug("Class Unloading", _gc_timer_cm); ! bool purged_classes = SystemDictionary::do_unloading(&g1_is_alive, false /* Defer klass cleaning */); ! g1h->complete_cleaning(&g1_is_alive, purged_classes); ! } else { ! GCTraceTime(Debug, gc, phases) debug("Cleanup", _gc_timer_cm); ! // No need to clean string table and symbol table as they are treated as strong roots when ! // class unloading is disabled. ! g1h->partial_cleaning(&g1_is_alive, false, false, G1StringDedup::is_enabled()); } } void G1ConcurrentMark::swapMarkBitMaps() { G1CMBitMapRO* temp = _prevMarkBitMap;
< prev index next >