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 #ifdef ASSERT
245 class ShenandoahAssertNotForwardedClosure : public OopClosure {
246 private:
247 template <class T>
248 inline void do_oop_work(T* p);
249
250 public:
251 inline void do_oop(narrowOop* p);
252 inline void do_oop(oop* p);
253 };
254 #endif // ASSERT
255
256 class ShenandoahMultiThreadClosure : public ThreadClosure {
257 ThreadClosure& _cl1;
258 ThreadClosure& _cl2;
259 public:
260 ShenandoahMultiThreadClosure(ThreadClosure& cl1, ThreadClosure& cl2) :
261 _cl1(cl1), _cl2(cl2) {}
262 inline void do_thread(Thread* thread) override {
263 _cl1.do_thread(thread);
|
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 class ShenandoahMultiThreadClosure : public ThreadClosure {
263 ThreadClosure& _cl1;
264 ThreadClosure& _cl2;
265 public:
266 ShenandoahMultiThreadClosure(ThreadClosure& cl1, ThreadClosure& cl2) :
267 _cl1(cl1), _cl2(cl2) {}
268 inline void do_thread(Thread* thread) override {
269 _cl1.do_thread(thread);
|