364 ZDriverGCScope(GCCause::Cause cause) :
365 _gc_id(),
366 _gc_cause(cause),
367 _gc_cause_setter(ZCollectedHeap::heap(), cause),
368 _timer(ZPhaseCycle),
369 _tracer() {
370 // Update statistics
371 ZStatCycle::at_start();
372 }
373
374 ~ZDriverGCScope() {
375 // Calculate boost factor
376 const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
377 (double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
378
379 // Update statistics
380 ZStatCycle::at_end(_gc_cause, boost_factor);
381
382 // Update data used by soft reference policy
383 Universe::update_heap_info_at_gc();
384 }
385 };
386
387 void ZDriver::gc(GCCause::Cause cause) {
388 ZDriverGCScope scope(cause);
389
390 // Phase 1: Pause Mark Start
391 pause_mark_start();
392
393 // Phase 2: Concurrent Mark
394 concurrent_mark();
395
396 // Phase 3: Pause Mark End
397 while (!pause_mark_end()) {
398 // Phase 3.5: Concurrent Mark Continue
399 concurrent_mark_continue();
400 }
401
402 // Phase 4: Concurrent Process Non-Strong References
403 concurrent_process_non_strong_references();
|
364 ZDriverGCScope(GCCause::Cause cause) :
365 _gc_id(),
366 _gc_cause(cause),
367 _gc_cause_setter(ZCollectedHeap::heap(), cause),
368 _timer(ZPhaseCycle),
369 _tracer() {
370 // Update statistics
371 ZStatCycle::at_start();
372 }
373
374 ~ZDriverGCScope() {
375 // Calculate boost factor
376 const double boost_factor = (double)ZHeap::heap()->nconcurrent_worker_threads() /
377 (double)ZHeap::heap()->nconcurrent_no_boost_worker_threads();
378
379 // Update statistics
380 ZStatCycle::at_end(_gc_cause, boost_factor);
381
382 // Update data used by soft reference policy
383 Universe::update_heap_info_at_gc();
384
385 // Signal that we have completed a visit to all live objects
386 Universe::heap()->next_whole_heap_examined();
387 }
388 };
389
390 void ZDriver::gc(GCCause::Cause cause) {
391 ZDriverGCScope scope(cause);
392
393 // Phase 1: Pause Mark Start
394 pause_mark_start();
395
396 // Phase 2: Concurrent Mark
397 concurrent_mark();
398
399 // Phase 3: Pause Mark End
400 while (!pause_mark_end()) {
401 // Phase 3.5: Concurrent Mark Continue
402 concurrent_mark_continue();
403 }
404
405 // Phase 4: Concurrent Process Non-Strong References
406 concurrent_process_non_strong_references();
|