< prev index next >

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

Print this page




 276 };
 277 
 278 class ZDriverCycleScope : public StackObj {
 279 private:
 280   GCIdMark                  _gc_id;
 281   GCCauseSetter             _gc_cause_setter;
 282   ZSoftReferencePolicyScope _soft_ref_policy;
 283   ZStatTimer                _timer;
 284 
 285   bool should_boost_worker_threads(GCCause::Cause cause) const {
 286     return cause == GCCause::_java_lang_system_gc ||
 287            cause == GCCause::_z_allocation_stall;
 288   }
 289 
 290 public:
 291   ZDriverCycleScope(GCCause::Cause cause) :
 292       _gc_id(),
 293       _gc_cause_setter(ZCollectedHeap::heap(), cause),
 294       _soft_ref_policy(cause),
 295       _timer(ZPhaseCycle) {




 296     const bool boost = should_boost_worker_threads(cause);
 297     ZHeap::heap()->set_boost_worker_threads(boost);









 298   }
 299 };
 300 
 301 void ZDriver::run_gc_cycle(GCCause::Cause cause) {
 302   ZDriverCycleScope scope(cause);
 303 
 304   // Phase 1: Pause Mark Start
 305   {
 306     ZMarkStartClosure cl;
 307     vm_operation(&cl);
 308   }
 309 
 310   // Phase 2: Concurrent Mark
 311   {
 312     ZStatTimer timer(ZPhaseConcurrentMark);
 313     ZHeap::heap()->mark();
 314   }
 315 
 316   // Phase 3: Pause Mark End
 317   {




 276 };
 277 
 278 class ZDriverCycleScope : public StackObj {
 279 private:
 280   GCIdMark                  _gc_id;
 281   GCCauseSetter             _gc_cause_setter;
 282   ZSoftReferencePolicyScope _soft_ref_policy;
 283   ZStatTimer                _timer;
 284 
 285   bool should_boost_worker_threads(GCCause::Cause cause) const {
 286     return cause == GCCause::_java_lang_system_gc ||
 287            cause == GCCause::_z_allocation_stall;
 288   }
 289 
 290 public:
 291   ZDriverCycleScope(GCCause::Cause cause) :
 292       _gc_id(),
 293       _gc_cause_setter(ZCollectedHeap::heap(), cause),
 294       _soft_ref_policy(cause),
 295       _timer(ZPhaseCycle) {
 296     // Update statistics
 297     ZStatCycle::at_start();
 298 
 299     // Set boost mode
 300     const bool boost = should_boost_worker_threads(cause);
 301     ZHeap::heap()->set_boost_worker_threads(boost);
 302   }
 303 
 304   ~ZDriverCycleScope() {
 305     // Calculate boost factor
 306     const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
 307                                 (double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
 308 
 309     // Update statistics
 310     ZStatCycle::at_end(boost_factor);
 311   }
 312 };
 313 
 314 void ZDriver::run_gc_cycle(GCCause::Cause cause) {
 315   ZDriverCycleScope scope(cause);
 316 
 317   // Phase 1: Pause Mark Start
 318   {
 319     ZMarkStartClosure cl;
 320     vm_operation(&cl);
 321   }
 322 
 323   // Phase 2: Concurrent Mark
 324   {
 325     ZStatTimer timer(ZPhaseConcurrentMark);
 326     ZHeap::heap()->mark();
 327   }
 328 
 329   // Phase 3: Pause Mark End
 330   {


< prev index next >