59 ShenandoahVMRoot<CONCURRENT>(storage, phase, par_phase) {
60 }
61
62 inline ShenandoahWeakRoot<false>::ShenandoahWeakRoot(OopStorage* storage,
63 ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase) :
64 _itr(storage), _phase(phase), _par_phase(par_phase) {
65 }
66
67 template <typename IsAliveClosure, typename KeepAliveClosure>
68 void ShenandoahWeakRoot<false /* concurrent */>::weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id) {
69 ShenandoahWorkerTimingsTracker timer(_phase, _par_phase, worker_id);
70 _itr.weak_oops_do(is_alive, keep_alive);
71 }
72
73 template <bool CONCURRENT>
74 ShenandoahWeakRoots<CONCURRENT>::ShenandoahWeakRoots() :
75 _jni_roots(OopStorageSet::jni_weak(), ShenandoahPhaseTimings::JNIWeakRoots),
76 _string_table_roots(OopStorageSet::string_table_weak(), ShenandoahPhaseTimings::StringTableRoots),
77 _resolved_method_table_roots(OopStorageSet::resolved_method_table_weak(), ShenandoahPhaseTimings::ResolvedMethodTableRoots),
78 _vm_roots(OopStorageSet::vm_weak(), ShenandoahPhaseTimings::VMWeakRoots) {
79 }
80
81 template <bool CONCURRENT>
82 template <typename Closure>
83 void ShenandoahWeakRoots<CONCURRENT>::oops_do(Closure* cl, uint worker_id) {
84 _jni_roots.oops_do(cl, worker_id);
85 _string_table_roots.oops_do(cl, worker_id);
86 _resolved_method_table_roots.oops_do(cl, worker_id);
87 _vm_roots.oops_do(cl, worker_id);
88 }
89
90 inline ShenandoahWeakRoots<false /* concurrent */>::ShenandoahWeakRoots(ShenandoahPhaseTimings::Phase phase) :
91 _jni_roots(OopStorageSet::jni_weak(), phase, ShenandoahPhaseTimings::JNIWeakRoots),
92 _string_table_roots(OopStorageSet::string_table_weak(), phase, ShenandoahPhaseTimings::StringTableRoots),
93 _resolved_method_table_roots(OopStorageSet::resolved_method_table_weak(), phase, ShenandoahPhaseTimings::ResolvedMethodTableRoots),
94 _vm_roots(OopStorageSet::vm_weak(), phase, ShenandoahPhaseTimings::VMWeakRoots) {
95 }
96
97 template <typename IsAliveClosure, typename KeepAliveClosure>
98 void ShenandoahWeakRoots<false /* concurrent*/>::weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id) {
|
59 ShenandoahVMRoot<CONCURRENT>(storage, phase, par_phase) {
60 }
61
62 inline ShenandoahWeakRoot<false>::ShenandoahWeakRoot(OopStorage* storage,
63 ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase) :
64 _itr(storage), _phase(phase), _par_phase(par_phase) {
65 }
66
67 template <typename IsAliveClosure, typename KeepAliveClosure>
68 void ShenandoahWeakRoot<false /* concurrent */>::weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id) {
69 ShenandoahWorkerTimingsTracker timer(_phase, _par_phase, worker_id);
70 _itr.weak_oops_do(is_alive, keep_alive);
71 }
72
73 template <bool CONCURRENT>
74 ShenandoahWeakRoots<CONCURRENT>::ShenandoahWeakRoots() :
75 _jni_roots(OopStorageSet::jni_weak(), ShenandoahPhaseTimings::JNIWeakRoots),
76 _string_table_roots(OopStorageSet::string_table_weak(), ShenandoahPhaseTimings::StringTableRoots),
77 _resolved_method_table_roots(OopStorageSet::resolved_method_table_weak(), ShenandoahPhaseTimings::ResolvedMethodTableRoots),
78 _vm_roots(OopStorageSet::vm_weak(), ShenandoahPhaseTimings::VMWeakRoots) {
79 StringTable::reset_dead_counter();
80 ResolvedMethodTable::reset_dead_counter();
81 }
82
83 template <bool CONCURRENT>
84 ShenandoahWeakRoots<CONCURRENT>::~ShenandoahWeakRoots() {
85 StringTable::finish_dead_counter();
86 ResolvedMethodTable::finish_dead_counter();
87 }
88
89 template <bool CONCURRENT>
90 template <typename Closure>
91 void ShenandoahWeakRoots<CONCURRENT>::oops_do(Closure* cl, uint worker_id) {
92 _jni_roots.oops_do(cl, worker_id);
93 _string_table_roots.oops_do(cl, worker_id);
94 _resolved_method_table_roots.oops_do(cl, worker_id);
95 _vm_roots.oops_do(cl, worker_id);
96 }
97
98 inline ShenandoahWeakRoots<false /* concurrent */>::ShenandoahWeakRoots(ShenandoahPhaseTimings::Phase phase) :
99 _jni_roots(OopStorageSet::jni_weak(), phase, ShenandoahPhaseTimings::JNIWeakRoots),
100 _string_table_roots(OopStorageSet::string_table_weak(), phase, ShenandoahPhaseTimings::StringTableRoots),
101 _resolved_method_table_roots(OopStorageSet::resolved_method_table_weak(), phase, ShenandoahPhaseTimings::ResolvedMethodTableRoots),
102 _vm_roots(OopStorageSet::vm_weak(), phase, ShenandoahPhaseTimings::VMWeakRoots) {
103 }
104
105 template <typename IsAliveClosure, typename KeepAliveClosure>
106 void ShenandoahWeakRoots<false /* concurrent*/>::weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id) {
|