< prev index next >
src/share/vm/gc/shenandoah/vm_operations_shenandoah.cpp
Print this page
@@ -30,17 +30,17 @@
#include "gc/shenandoah/vm_operations_shenandoah.hpp"
void VM_ShenandoahInitMark::doit() {
GCIdMark gc_id_mark(_gc_id);
ShenandoahHeap *sh = (ShenandoahHeap*) Universe::heap();
- WorkGang* workers = sh->workers();
+ ShenandoahWorkGang* workers = sh->workers();
// Calculate workers for initial marking
uint nworkers = ShenandoahCollectorPolicy::calc_workers_for_init_marking(
workers->active_workers(), Threads::number_of_non_daemon_threads());
- ShenandoahWorkerScope scope(workers, nworkers);
+ ShenandoahWorkerSessionScope scope(workers, nworkers, ShenandoahWorkerSessionScope::Parallel);
GCTraceTime(Info, gc) time("Pause Init Mark", sh->gc_timer());
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::total_pause);
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::init_mark);
@@ -86,17 +86,18 @@
// It is critical that we
// evacuate roots right after finishing marking, so that we don't
// get unmarked objects in the roots.
ShenandoahHeap *sh = ShenandoahHeap::heap();
+
+ if (! sh->cancelled_concgc()) {
// Setup workers for final marking
- WorkGang* workers = sh->workers();
+ ShenandoahWorkGang* workers = sh->workers();
uint n_workers = ShenandoahCollectorPolicy::calc_workers_for_final_marking(workers->active_workers(),
Threads::number_of_non_daemon_threads());
- ShenandoahWorkerScope scope(workers, n_workers);
+ ShenandoahWorkerSessionScope scope(workers, n_workers, ShenandoahWorkerSessionScope::Parallel);
- if (! sh->cancelled_concgc()) {
GCTraceTime(Info, gc) time("Pause Final Mark", sh->gc_timer(), GCCause::_no_gc, true);
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::total_pause);
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::final_mark);
sh->concurrentMark()->finish_mark_from_roots();
sh->stop_concurrent_marking();
@@ -113,11 +114,10 @@
sh->set_need_update_refs(true);
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::init_evac);
sh->evacuate_and_update_roots();
sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::init_evac);
-
} else {
GCTraceTime(Info, gc) time("Cancel Concurrent Mark", sh->gc_timer(), GCCause::_no_gc, true);
sh->concurrentMark()->cancel();
sh->stop_concurrent_marking();
}
< prev index next >