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

Print this page

        

@@ -1460,11 +1460,11 @@
 
     // See the comment in G1CollectedHeap::ref_processing_init() about
     // how reference processing currently works in G1.
 
     // Temporarily make reference _discovery_ single threaded (non-MT).
-    ReferenceProcessorMTMutator rp_disc_ser(ref_processor(), false);
+    ReferenceProcessorMTDiscoveryMutator rp_disc_ser(ref_processor(), false);
 
     // Temporarily make refs discovery atomic
     ReferenceProcessorAtomicMutator rp_disc_atomic(ref_processor(), true);
 
     // Temporarily clear _is_alive_non_header

@@ -2217,18 +2217,18 @@
   // * A full GC enables (non-MT) reference discovery and
   //   processes any discovered references.
 
   SharedHeap::ref_processing_init();
   MemRegion mr = reserved_region();
-  _ref_processor = ReferenceProcessor::create_ref_processor(
-                                         mr,    // span
+  _ref_processor =
+    new ReferenceProcessor(mr,    // span
+                           ParallelRefProcEnabled && (ParallelGCThreads > 1),    // mt processing
+                           ParallelGCThreads,         // degree of mt processing
+                           ParallelGCThreads > 1 || ConcGCThreads > 1,  // mt discovery
+                           MAX2(ParallelGCThreads, ConcGCThreads), // degree of mt discovery
                                          false, // Reference discovery is not atomic
-                                         true,  // mt_discovery
-                                         &_is_alive_closure, // is alive closure
-                                                             // for efficiency
-                                         ParallelGCThreads,
-                                         ParallelRefProcEnabled,
+                           &_is_alive_closure,        // is alive closure for efficiency
                                          true); // Setting next fields of discovered
                                                 // lists requires a barrier.
 }
 
 size_t G1CollectedHeap::capacity() const {