< prev index next >

src/share/vm/gc_implementation/shenandoah/shenandoahOopClosures.hpp

Print this page
rev 10663 : [backport] StringDedupMode enum for closures/method templates
rev 10715 : [backport] Cleanup up superfluous newlines
rev 10772 : [backport] Update copyrights

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2015, Red Hat, Inc. and/or its affiliates.
+ * Copyright (c) 2015, 2018, Red Hat, Inc. All rights reserved.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.
  *

@@ -35,10 +35,15 @@
   RESOLVE,    // Only a read-barrier (no reference updating)
   SIMPLE,     // Reference updating using simple store
   CONCURRENT  // Reference updating using CAS
 };
 
+enum StringDedupMode {
+  NO_DEDUP,      // Do not do anything for String deduplication
+  ENQUEUE_DEDUP, // Enqueue candidate Strings for deduplication
+};
+
 class ShenandoahMarkRefsSuperClosure : public MetadataAwareOopClosure {
 private:
   ShenandoahObjToScanQueue* _queue;
   ShenandoahStrDedupQueue*  _dedup_queue;
   ShenandoahHeap* _heap;

@@ -46,21 +51,21 @@
 
 public:
   ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp);
   ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp);
 
-  template <class T, UpdateRefsMode UPDATE_MODE, bool STRING_DEDUP>
+  template <class T, UpdateRefsMode UPDATE_MODE, StringDedupMode STRING_DEDUP>
   void work(T *p);
 };
 
 class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
 public:
   ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
           ShenandoahMarkRefsSuperClosure(q, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, false /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, NO_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -69,11 +74,11 @@
 public:
   ShenandoahMarkUpdateRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
           ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, true /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, ENQUEUE_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -82,11 +87,11 @@
 public:
   ShenandoahMarkUpdateRefsMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, false /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, NO_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return true; }
   virtual bool do_metadata()        { return true; }
 };

@@ -95,11 +100,11 @@
 public:
   ShenandoahMarkUpdateRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
   ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, true /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, CONCURRENT, ENQUEUE_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return true; }
   virtual bool do_metadata()        { return true; }
 };

@@ -108,11 +113,11 @@
 public:
   ShenandoahMarkRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, NONE, false /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, NONE, NO_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -121,11 +126,11 @@
 public:
   ShenandoahMarkRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, NONE, true /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, NONE, ENQUEUE_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -134,11 +139,11 @@
 public:
   ShenandoahMarkResolveRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, RESOLVE, false /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, RESOLVE, NO_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -147,11 +152,11 @@
 public:
   ShenandoahMarkResolveRefsDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, RESOLVE, true /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, RESOLVE, ENQUEUE_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return false; }
   virtual bool do_metadata()        { return false; }
 };

@@ -160,11 +165,11 @@
 public:
   ShenandoahMarkRefsMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, NONE, false /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, NONE, NO_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return true; }
   virtual bool do_metadata()        { return true; }
 };

@@ -173,11 +178,11 @@
 public:
   ShenandoahMarkRefsMetadataDedupClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp) :
     ShenandoahMarkRefsSuperClosure(q, dq, rp) {};
 
   template <class T>
-  inline void do_oop_nv(T* p)       { work<T, NONE, true /* string dedup */>(p); }
+  inline void do_oop_nv(T* p)       { work<T, NONE, ENQUEUE_DEDUP>(p); }
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   inline bool do_metadata_nv()      { return true; }
   virtual bool do_metadata()        { return true; }
 };

@@ -193,7 +198,6 @@
 
   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
   virtual void do_oop(oop* p)       { do_oop_nv(p); }
 };
 
-
 #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_HPP
< prev index next >