src/hotspot/share/gc/shenandoah/shenandoahOopClosures.hpp
changeset 58729 15f4471787b9
parent 54848 5d8c5c7bca95
equal deleted inserted replaced
58728:6d5c7f91e0b5 58729:15f4471787b9
   212     _thread(Thread::current()),
   212     _thread(Thread::current()),
   213     _queue(q),
   213     _queue(q),
   214     _mark_context(ShenandoahHeap::heap()->marking_context()) {
   214     _mark_context(ShenandoahHeap::heap()->marking_context()) {
   215   }
   215   }
   216 
   216 
   217   template <class T, bool STRING_DEDUP, bool DEGEN>
   217   template <class T, bool STRING_DEDUP, bool DEGEN, bool ATOMIC_UPDATE>
   218   void work(T* p);
   218   void work(T* p);
   219 
   219 
   220 };
   220 };
   221 
   221 
       
   222 class ShenandoahTraversalRootsClosure : public ShenandoahTraversalSuperClosure {
       
   223 private:
       
   224   template <class T>
       
   225   inline void do_oop_work(T* p)     { work<T, false, false, false>(p); }
       
   226 
       
   227 public:
       
   228   ShenandoahTraversalRootsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
       
   229     ShenandoahTraversalSuperClosure(q, rp) {}
       
   230 
       
   231   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
       
   232   virtual void do_oop(oop* p)       { do_oop_work(p); }
       
   233 
       
   234   virtual bool do_metadata()        { return false; }
       
   235 };
       
   236 
   222 class ShenandoahTraversalClosure : public ShenandoahTraversalSuperClosure {
   237 class ShenandoahTraversalClosure : public ShenandoahTraversalSuperClosure {
   223 private:
   238 private:
   224   template <class T>
   239   template <class T>
   225   inline void do_oop_work(T* p)     { work<T, false, false>(p); }
   240   inline void do_oop_work(T* p)     { work<T, false, false, true>(p); }
   226 
   241 
   227 public:
   242 public:
   228   ShenandoahTraversalClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   243   ShenandoahTraversalClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   229     ShenandoahTraversalSuperClosure(q, rp) {}
   244     ShenandoahTraversalSuperClosure(q, rp) {}
   230 
   245 
   235 };
   250 };
   236 
   251 
   237 class ShenandoahTraversalMetadataClosure : public ShenandoahTraversalSuperClosure {
   252 class ShenandoahTraversalMetadataClosure : public ShenandoahTraversalSuperClosure {
   238 private:
   253 private:
   239   template <class T>
   254   template <class T>
   240   inline void do_oop_work(T* p)     { work<T, false, false>(p); }
   255   inline void do_oop_work(T* p)     { work<T, false, false, true>(p); }
   241 
   256 
   242 public:
   257 public:
   243   ShenandoahTraversalMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   258   ShenandoahTraversalMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   244     ShenandoahTraversalSuperClosure(q, rp) {}
   259     ShenandoahTraversalSuperClosure(q, rp) {}
   245 
   260 
   250 };
   265 };
   251 
   266 
   252 class ShenandoahTraversalDedupClosure : public ShenandoahTraversalSuperClosure {
   267 class ShenandoahTraversalDedupClosure : public ShenandoahTraversalSuperClosure {
   253 private:
   268 private:
   254   template <class T>
   269   template <class T>
   255   inline void do_oop_work(T* p)     { work<T, true, false>(p); }
   270   inline void do_oop_work(T* p)     { work<T, true, false, true>(p); }
   256 
   271 
   257 public:
   272 public:
   258   ShenandoahTraversalDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   273   ShenandoahTraversalDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   259     ShenandoahTraversalSuperClosure(q, rp) {}
   274     ShenandoahTraversalSuperClosure(q, rp) {}
   260 
   275 
   265 };
   280 };
   266 
   281 
   267 class ShenandoahTraversalMetadataDedupClosure : public ShenandoahTraversalSuperClosure {
   282 class ShenandoahTraversalMetadataDedupClosure : public ShenandoahTraversalSuperClosure {
   268 private:
   283 private:
   269   template <class T>
   284   template <class T>
   270   inline void do_oop_work(T* p)     { work<T, true, false>(p); }
   285   inline void do_oop_work(T* p)     { work<T, true, false, true>(p); }
   271 
   286 
   272 public:
   287 public:
   273   ShenandoahTraversalMetadataDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   288   ShenandoahTraversalMetadataDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   274     ShenandoahTraversalSuperClosure(q, rp) {}
   289     ShenandoahTraversalSuperClosure(q, rp) {}
   275 
   290 
   280 };
   295 };
   281 
   296 
   282 class ShenandoahTraversalDegenClosure : public ShenandoahTraversalSuperClosure {
   297 class ShenandoahTraversalDegenClosure : public ShenandoahTraversalSuperClosure {
   283 private:
   298 private:
   284   template <class T>
   299   template <class T>
   285   inline void do_oop_work(T* p)     { work<T, false, true>(p); }
   300   inline void do_oop_work(T* p)     { work<T, false, true, false>(p); }
   286 
   301 
   287 public:
   302 public:
   288   ShenandoahTraversalDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   303   ShenandoahTraversalDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   289     ShenandoahTraversalSuperClosure(q, rp) {}
   304     ShenandoahTraversalSuperClosure(q, rp) {}
   290 
   305 
   295 };
   310 };
   296 
   311 
   297 class ShenandoahTraversalMetadataDegenClosure : public ShenandoahTraversalSuperClosure {
   312 class ShenandoahTraversalMetadataDegenClosure : public ShenandoahTraversalSuperClosure {
   298 private:
   313 private:
   299   template <class T>
   314   template <class T>
   300   inline void do_oop_work(T* p)     { work<T, false, true>(p); }
   315   inline void do_oop_work(T* p)     { work<T, false, true, false>(p); }
   301 
   316 
   302 public:
   317 public:
   303   ShenandoahTraversalMetadataDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   318   ShenandoahTraversalMetadataDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   304     ShenandoahTraversalSuperClosure(q, rp) {}
   319     ShenandoahTraversalSuperClosure(q, rp) {}
   305 
   320 
   310 };
   325 };
   311 
   326 
   312 class ShenandoahTraversalDedupDegenClosure : public ShenandoahTraversalSuperClosure {
   327 class ShenandoahTraversalDedupDegenClosure : public ShenandoahTraversalSuperClosure {
   313 private:
   328 private:
   314   template <class T>
   329   template <class T>
   315   inline void do_oop_work(T* p)     { work<T, true, true>(p); }
   330   inline void do_oop_work(T* p)     { work<T, true, true, false>(p); }
   316 
   331 
   317 public:
   332 public:
   318   ShenandoahTraversalDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   333   ShenandoahTraversalDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   319     ShenandoahTraversalSuperClosure(q, rp) {}
   334     ShenandoahTraversalSuperClosure(q, rp) {}
   320 
   335 
   325 };
   340 };
   326 
   341 
   327 class ShenandoahTraversalMetadataDedupDegenClosure : public ShenandoahTraversalSuperClosure {
   342 class ShenandoahTraversalMetadataDedupDegenClosure : public ShenandoahTraversalSuperClosure {
   328 private:
   343 private:
   329   template <class T>
   344   template <class T>
   330   inline void do_oop_work(T* p)     { work<T, true, true>(p); }
   345   inline void do_oop_work(T* p)     { work<T, true, true, false>(p); }
   331 
   346 
   332 public:
   347 public:
   333   ShenandoahTraversalMetadataDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   348   ShenandoahTraversalMetadataDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
   334     ShenandoahTraversalSuperClosure(q, rp) {}
   349     ShenandoahTraversalSuperClosure(q, rp) {}
   335 
   350