129 const ShenandoahPhaseTimings::ParPhase _par_phase;
130
131 public:
132 ShenandoahWeakRoot(OopStorage* storage,
133 ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase);
134
135 template <typename IsAliveClosure, typename KeepAliveClosure>
136 void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id);
137 };
138
139 template <bool CONCURRENT>
140 class ShenandoahWeakRoots {
141 private:
142 ShenandoahWeakRoot<CONCURRENT> _jni_roots;
143 ShenandoahWeakRoot<CONCURRENT> _string_table_roots;
144 ShenandoahWeakRoot<CONCURRENT> _resolved_method_table_roots;
145 ShenandoahWeakRoot<CONCURRENT> _vm_roots;
146
147 public:
148 ShenandoahWeakRoots();
149
150 template <typename Closure>
151 void oops_do(Closure* cl, uint worker_id);
152 };
153
154 template <>
155 class ShenandoahWeakRoots<false /*concurrent */> {
156 private:
157 ShenandoahWeakRoot<false /*concurrent*/> _jni_roots;
158 ShenandoahWeakRoot<false /*concurrent*/> _string_table_roots;
159 ShenandoahWeakRoot<false /*concurrent*/> _resolved_method_table_roots;
160 ShenandoahWeakRoot<false /*concurrent*/> _vm_roots;
161 public:
162 ShenandoahWeakRoots(ShenandoahPhaseTimings::Phase phase);
163
164 template <typename Closure>
165 void oops_do(Closure* cl, uint worker_id);
166
167 template <typename IsAliveClosure, typename KeepAliveClosure>
168 void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id);
|
129 const ShenandoahPhaseTimings::ParPhase _par_phase;
130
131 public:
132 ShenandoahWeakRoot(OopStorage* storage,
133 ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase);
134
135 template <typename IsAliveClosure, typename KeepAliveClosure>
136 void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id);
137 };
138
139 template <bool CONCURRENT>
140 class ShenandoahWeakRoots {
141 private:
142 ShenandoahWeakRoot<CONCURRENT> _jni_roots;
143 ShenandoahWeakRoot<CONCURRENT> _string_table_roots;
144 ShenandoahWeakRoot<CONCURRENT> _resolved_method_table_roots;
145 ShenandoahWeakRoot<CONCURRENT> _vm_roots;
146
147 public:
148 ShenandoahWeakRoots();
149 ~ShenandoahWeakRoots();
150
151 template <typename Closure>
152 void oops_do(Closure* cl, uint worker_id);
153 };
154
155 template <>
156 class ShenandoahWeakRoots<false /*concurrent */> {
157 private:
158 ShenandoahWeakRoot<false /*concurrent*/> _jni_roots;
159 ShenandoahWeakRoot<false /*concurrent*/> _string_table_roots;
160 ShenandoahWeakRoot<false /*concurrent*/> _resolved_method_table_roots;
161 ShenandoahWeakRoot<false /*concurrent*/> _vm_roots;
162 public:
163 ShenandoahWeakRoots(ShenandoahPhaseTimings::Phase phase);
164
165 template <typename Closure>
166 void oops_do(Closure* cl, uint worker_id);
167
168 template <typename IsAliveClosure, typename KeepAliveClosure>
169 void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id);
|