< prev index next >
src/share/vm/gc/g1/g1ConcurrentMark.cpp
Print this page
rev 12504 : 8171238: Unify cleanup code used in G1 Remark and Full GC marking
Reviewed-by:
@@ -1657,14 +1657,10 @@
// 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
@@ -1773,26 +1769,19 @@
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);
- }
- }
+ GCTraceTime(Debug, gc, phases) debug("Class Unloading", _gc_timer_cm);
+ bool purged_classes = SystemDictionary::do_unloading(&g1_is_alive, false /* Defer klass cleaning */);
+ g1h->full_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());
- 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;
< prev index next >