src/share/vm/gc_implementation/g1/concurrentMark.cpp
Print this page
*** 2165,2175 ****
--- 2165,2177 ----
// We need to make this be a "collection" so any collection pause that
// races with it goes around and waits for completeCleanup to finish.
g1h->increment_total_collections();
// Clean out dead classes and update Metaspace sizes.
+ if (ClassUnloadingWithConcurrentMark) {
ClassLoaderDataGraph::purge();
+ }
MetaspaceGC::compute_new_size();
// We reclaimed old regions so we should calculate the sizes to make
// sure we update the old gen/space data.
g1h->g1mm()->update_sizes();
*** 2595,2607 ****
}
assert(_markStack.isEmpty(), "Marking should have completed");
// Unload Klasses, String, Symbols, Code Cache, etc.
!
G1RemarkGCTraceTime trace("Unloading", G1Log::finer());
bool purged_classes;
{
G1RemarkGCTraceTime trace("System Dictionary Unloading", G1Log::finest());
purged_classes = SystemDictionary::do_unloading(&g1_is_alive);
--- 2597,2610 ----
}
assert(_markStack.isEmpty(), "Marking should have completed");
// Unload Klasses, String, Symbols, Code Cache, etc.
! {
G1RemarkGCTraceTime trace("Unloading", G1Log::finer());
+ if (ClassUnloadingWithConcurrentMark) {
bool purged_classes;
{
G1RemarkGCTraceTime trace("System Dictionary Unloading", G1Log::finest());
purged_classes = SystemDictionary::do_unloading(&g1_is_alive);
*** 2609,2623 ****
--- 2612,2628 ----
{
G1RemarkGCTraceTime trace("Parallel Unloading", G1Log::finest());
weakRefsWorkParallelPart(&g1_is_alive, purged_classes);
}
+ }
if (G1StringDedup::is_enabled()) {
G1RemarkGCTraceTime trace("String Deduplication Unlink", G1Log::finest());
G1StringDedup::unlink(&g1_is_alive);
}
+ }
}
void ConcurrentMark::swapMarkBitMaps() {
CMBitMapRO* temp = _prevMarkBitMap;
_prevMarkBitMap = (CMBitMapRO*)_nextMarkBitMap;