< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp

Print this page

183   inline void do_oop_work(T* p);
184 };
185 
186 using ShenandoahEvacuateUpdateMetadataClosure     = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
187 using ShenandoahEvacuateUpdateRootsClosure        = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
188 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
189 
190 
191 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
192 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
193 private:
194   IsAlive*    _is_alive;
195   KeepAlive*  _keep_alive;
196 
197 public:
198   inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
199   inline void do_oop(oop* p);
200   inline void do_oop(narrowOop* p);
201 };
202 
203 class ShenandoahNMethodAndDisarmClosure : public NMethodToOopClosure {
204 public:
205   inline ShenandoahNMethodAndDisarmClosure(OopClosure* cl);
206   inline void do_nmethod(nmethod* nm);
207 };
208 
209 
210 //
211 // ========= Update References
212 //
213 
214 template <ShenandoahGenerationType GENERATION>
215 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
216 private:
217   template <class T>
218   inline void work(T* p);
219 
220 public:
221   ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
222 
223   virtual void do_oop(narrowOop* p) { work(p); }
224   virtual void do_oop(oop* p)       { work(p); }
225 };
226 
227 class ShenandoahUpdateRefsSuperClosure : public ShenandoahSuperClosure {};
228 
229 class ShenandoahNonConcUpdateRefsClosure : public ShenandoahUpdateRefsSuperClosure {

245   virtual void do_oop(narrowOop* p) { work(p); }
246   virtual void do_oop(oop* p)       { work(p); }
247 };
248 
249 
250 class ShenandoahFlushSATB : public ThreadClosure {
251 private:
252   SATBMarkQueueSet& _satb_qset;
253 
254 public:
255   explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
256 
257   inline void do_thread(Thread* thread) override;
258 };
259 
260 
261 //
262 // ========= Utilities
263 //
264 






265 #ifdef ASSERT
266 class ShenandoahAssertNotForwardedClosure : public OopClosure {
267 private:
268   template <class T>
269   inline void do_oop_work(T* p);
270 
271 public:
272   inline void do_oop(narrowOop* p);
273   inline void do_oop(oop* p);
274 };
275 #endif // ASSERT
276 
277 class ShenandoahMultiThreadClosure : public ThreadClosure {
278   ThreadClosure& _cl1;
279   ThreadClosure& _cl2;
280 public:
281   ShenandoahMultiThreadClosure(ThreadClosure& cl1, ThreadClosure& cl2) :
282     _cl1(cl1), _cl2(cl2) {}
283   inline void do_thread(Thread* thread) override {
284     _cl1.do_thread(thread);

183   inline void do_oop_work(T* p);
184 };
185 
186 using ShenandoahEvacuateUpdateMetadataClosure     = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
187 using ShenandoahEvacuateUpdateRootsClosure        = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
188 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
189 
190 
191 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
192 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
193 private:
194   IsAlive*    _is_alive;
195   KeepAlive*  _keep_alive;
196 
197 public:
198   inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
199   inline void do_oop(oop* p);
200   inline void do_oop(narrowOop* p);
201 };
202 







203 //
204 // ========= Update References
205 //
206 
207 template <ShenandoahGenerationType GENERATION>
208 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
209 private:
210   template <class T>
211   inline void work(T* p);
212 
213 public:
214   ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
215 
216   virtual void do_oop(narrowOop* p) { work(p); }
217   virtual void do_oop(oop* p)       { work(p); }
218 };
219 
220 class ShenandoahUpdateRefsSuperClosure : public ShenandoahSuperClosure {};
221 
222 class ShenandoahNonConcUpdateRefsClosure : public ShenandoahUpdateRefsSuperClosure {

238   virtual void do_oop(narrowOop* p) { work(p); }
239   virtual void do_oop(oop* p)       { work(p); }
240 };
241 
242 
243 class ShenandoahFlushSATB : public ThreadClosure {
244 private:
245   SATBMarkQueueSet& _satb_qset;
246 
247 public:
248   explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
249 
250   inline void do_thread(Thread* thread) override;
251 };
252 
253 
254 //
255 // ========= Utilities
256 //
257 
258 class ShenandoahNoOpClosure : public OopClosure {
259 public:
260   inline void do_oop(oop* p)       { }
261   inline void do_oop(narrowOop* p) { }
262 };
263 
264 #ifdef ASSERT
265 class ShenandoahAssertNotForwardedClosure : public OopClosure {
266 private:
267   template <class T>
268   inline void do_oop_work(T* p);
269 
270 public:
271   inline void do_oop(narrowOop* p);
272   inline void do_oop(oop* p);
273 };
274 #endif // ASSERT
275 
276 class ShenandoahMultiThreadClosure : public ThreadClosure {
277   ThreadClosure& _cl1;
278   ThreadClosure& _cl2;
279 public:
280   ShenandoahMultiThreadClosure(ThreadClosure& cl1, ThreadClosure& cl2) :
281     _cl1(cl1), _cl2(cl2) {}
282   inline void do_thread(Thread* thread) override {
283     _cl1.do_thread(thread);
< prev index next >