< prev index next >

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

Print this page

166   inline void do_oop_work(T* p);
167 };
168 
169 using ShenandoahEvacuateUpdateMetadataClosure     = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
170 using ShenandoahEvacuateUpdateRootsClosure        = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
171 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
172 
173 
174 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
175 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
176 private:
177   IsAlive*    _is_alive;
178   KeepAlive*  _keep_alive;
179 
180 public:
181   inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
182   inline void do_oop(oop* p);
183   inline void do_oop(narrowOop* p);
184 };
185 
186 class ShenandoahNMethodAndDisarmClosure : public NMethodToOopClosure {
187 public:
188   inline ShenandoahNMethodAndDisarmClosure(OopClosure* cl);
189   inline void do_nmethod(nmethod* nm);
190 };
191 
192 
193 //
194 // ========= Update References
195 //
196 
197 template <ShenandoahGenerationType GENERATION>
198 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
199 private:
200   template <class T>
201   inline void work(T* p);
202 
203 public:
204   ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
205 
206   virtual void do_oop(narrowOop* p) { work(p); }
207   virtual void do_oop(oop* p)       { work(p); }
208 };
209 
210 class ShenandoahUpdateRefsSuperClosure : public ShenandoahSuperClosure {};
211 
212 class ShenandoahNonConcUpdateRefsClosure : public ShenandoahUpdateRefsSuperClosure {

228   virtual void do_oop(narrowOop* p) { work(p); }
229   virtual void do_oop(oop* p)       { work(p); }
230 };
231 
232 
233 class ShenandoahFlushSATB : public ThreadClosure {
234 private:
235   SATBMarkQueueSet& _satb_qset;
236 
237 public:
238   explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
239 
240   inline void do_thread(Thread* thread) override;
241 };
242 
243 
244 //
245 // ========= Utilities
246 //
247 






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

166   inline void do_oop_work(T* p);
167 };
168 
169 using ShenandoahEvacuateUpdateMetadataClosure     = ShenandoahEvacuateUpdateRootClosureBase<false, true>;
170 using ShenandoahEvacuateUpdateRootsClosure        = ShenandoahEvacuateUpdateRootClosureBase<true, false>;
171 using ShenandoahContextEvacuateUpdateRootsClosure = ShenandoahEvacuateUpdateRootClosureBase<true, true>;
172 
173 
174 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
175 class ShenandoahCleanUpdateWeakOopsClosure : public OopClosure {
176 private:
177   IsAlive*    _is_alive;
178   KeepAlive*  _keep_alive;
179 
180 public:
181   inline ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive);
182   inline void do_oop(oop* p);
183   inline void do_oop(narrowOop* p);
184 };
185 







186 //
187 // ========= Update References
188 //
189 
190 template <ShenandoahGenerationType GENERATION>
191 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
192 private:
193   template <class T>
194   inline void work(T* p);
195 
196 public:
197   ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ShenandoahReferenceProcessor* rp, ShenandoahObjToScanQueue* old_q);
198 
199   virtual void do_oop(narrowOop* p) { work(p); }
200   virtual void do_oop(oop* p)       { work(p); }
201 };
202 
203 class ShenandoahUpdateRefsSuperClosure : public ShenandoahSuperClosure {};
204 
205 class ShenandoahNonConcUpdateRefsClosure : public ShenandoahUpdateRefsSuperClosure {

221   virtual void do_oop(narrowOop* p) { work(p); }
222   virtual void do_oop(oop* p)       { work(p); }
223 };
224 
225 
226 class ShenandoahFlushSATB : public ThreadClosure {
227 private:
228   SATBMarkQueueSet& _satb_qset;
229 
230 public:
231   explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {}
232 
233   inline void do_thread(Thread* thread) override;
234 };
235 
236 
237 //
238 // ========= Utilities
239 //
240 
241 class ShenandoahNoOpClosure : public OopClosure {
242 public:
243   inline void do_oop(oop* p)       { }
244   inline void do_oop(narrowOop* p) { }
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 class ShenandoahMultiThreadClosure : public ThreadClosure {
260   ThreadClosure& _cl1;
261   ThreadClosure& _cl2;
262 public:
263   ShenandoahMultiThreadClosure(ThreadClosure& cl1, ThreadClosure& cl2) :
264     _cl1(cl1), _cl2(cl2) {}
265   inline void do_thread(Thread* thread) override {
266     _cl1.do_thread(thread);
< prev index next >