163 };
164
165 using ShenandoahEvacuateUpdateMetadataClosure = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
166 using ShenandoahEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
167 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
168
169
170 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
171 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
172 private:
173 IsAlive* _is_alive;
174 KeepAlive* _keep_alive;
175
176 public:
177 inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
178 inline void do_oop(oop* p);
179 inline void do_oop(narrowOop* p);
180 };
181
182 class ShenandoahNMethodAndDisarmClosure : public NMethodToOopClosure {
183 private:
184 BarrierSetNMethod* const _bs;
185
186 public:
187 inline ShenandoahNMethodAndDisarmClosure(OopClosure* cl);
188 inline void do_nmethod(nmethod* nm);
189 };
190
191
192 //
193 // ========= Update References
194 //
195
196 template <ShenandoahGenerationType GENERATION>
197 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
198 private:
199 template <class T>
200 inline void work(T* p);
201
202 public:
203 ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
204
205 virtual void do_oop(narrowOop* p) { work(p); }
227 virtual void do_oop(narrowOop* p) { work(p); }
228 virtual void do_oop(oop* p) { work(p); }
229 };
230
231
232 class ShenandoahFlushSATB : public ThreadClosure {
233 private:
234 SATBMarkQueueSet& _satb_qset;
235
236 public:
237 explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
238
239 inline void do_thread(Thread* thread) override;
240 };
241
242
243 //
244 // ========= Utilities
245 //
246
247 #ifdef ASSERT
248 class ShenandoahAssertNotForwardedClosure : public OopClosure {
249 private:
250 template <class T>
251 inline void do_oop_work(T* p);
252
253 public:
254 inline void do_oop(narrowOop* p);
255 inline void do_oop(oop* p);
256 };
257 #endif // ASSERT
258
259 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_HPP
|
163 };
164
165 using ShenandoahEvacuateUpdateMetadataClosure = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
166 using ShenandoahEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
167 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
168
169
170 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
171 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
172 private:
173 IsAlive* _is_alive;
174 KeepAlive* _keep_alive;
175
176 public:
177 inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
178 inline void do_oop(oop* p);
179 inline void do_oop(narrowOop* p);
180 };
181
182 class ShenandoahNMethodAndDisarmClosure : public NMethodToOopClosure {
183 public:
184 inline ShenandoahNMethodAndDisarmClosure(OopClosure* cl);
185 inline void do_nmethod(nmethod* nm);
186 };
187
188
189 //
190 // ========= Update References
191 //
192
193 template <ShenandoahGenerationType GENERATION>
194 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
195 private:
196 template <class T>
197 inline void work(T* p);
198
199 public:
200 ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
201
202 virtual void do_oop(narrowOop* p) { work(p); }
224 virtual void do_oop(narrowOop* p) { work(p); }
225 virtual void do_oop(oop* p) { work(p); }
226 };
227
228
229 class ShenandoahFlushSATB : public ThreadClosure {
230 private:
231 SATBMarkQueueSet& _satb_qset;
232
233 public:
234 explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
235
236 inline void do_thread(Thread* thread) override;
237 };
238
239
240 //
241 // ========= Utilities
242 //
243
244 class ShenandoahNoOpClosure : public OopClosure {
245 public:
246 inline void do_oop(oop* p) { }
247 inline void do_oop(narrowOop* p) { }
248 };
249
250 #ifdef ASSERT
251 class ShenandoahAssertNotForwardedClosure : public OopClosure {
252 private:
253 template <class T>
254 inline void do_oop_work(T* p);
255
256 public:
257 inline void do_oop(narrowOop* p);
258 inline void do_oop(oop* p);
259 };
260 #endif // ASSERT
261
262 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_HPP
|