< 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 >