< prev index next >

src/hotspot/share/gc/z/zDriver.cpp

Print this page

        

@@ -248,21 +248,15 @@
   case GCCause::_z_warmup:
   case GCCause::_z_allocation_rate:
   case GCCause::_z_allocation_stall:
   case GCCause::_z_proactive:
   case GCCause::_z_high_usage:
+  case GCCause::_metadata_GC_threshold:
     // Start asynchronous GC
     _gc_cycle_port.send_async(cause);
     break;
 
-  case GCCause::_metadata_GC_threshold:
-    // Start asynchronous GC, but only if the GC is warm
-    if (ZStatCycle::is_warm()) {
-      _gc_cycle_port.send_async(cause);
-    }
-    break;
-
   case GCCause::_gc_locker:
     // Restart VM operation previously blocked by the GC locker
     _gc_locker_port.signal();
     break;
 

@@ -350,17 +344,19 @@
   ZHeap::heap()->check_out_of_memory();
 }
 
 class ZDriverGCScope : public StackObj {
 private:
-  GCIdMark      _gc_id;
-  GCCauseSetter _gc_cause_setter;
-  ZStatTimer    _timer;
+  GCIdMark       _gc_id;
+  GCCause::Cause _gc_cause;
+  GCCauseSetter  _gc_cause_setter;
+  ZStatTimer     _timer;
 
 public:
   ZDriverGCScope(GCCause::Cause cause) :
       _gc_id(),
+      _gc_cause(cause),
       _gc_cause_setter(ZCollectedHeap::heap(), cause),
       _timer(ZPhaseCycle) {
     // Update statistics
     ZStatCycle::at_start();
   }

@@ -369,11 +365,11 @@
     // Calculate boost factor
     const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
                                 (double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
 
     // Update statistics
-    ZStatCycle::at_end(boost_factor);
+    ZStatCycle::at_end(_gc_cause, boost_factor);
 
     // Update data used by soft reference policy
     Universe::update_heap_info_at_gc();
   }
 };
< prev index next >