src/share/vm/gc_implementation/g1/concurrentMark.cpp

Print this page

        

@@ -2165,11 +2165,13 @@
   // 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,13 +2597,14 @@
   }
 
   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,15 +2612,17 @@
 
   {
     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;