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;