src/hotspot/share/gc/g1/satbMarkQueue.hpp
changeset 51393 cc8d309cd05a
parent 51368 adcb0bb3d1e9
child 51401 58113ce90caf
--- a/src/hotspot/share/gc/g1/satbMarkQueue.hpp	Tue Aug 14 10:42:00 2018 +0800
+++ b/src/hotspot/share/gc/g1/satbMarkQueue.hpp	Tue Aug 14 00:15:56 2018 -0400
@@ -49,13 +49,13 @@
   // Filter out unwanted entries from the buffer.
   inline void filter();
 
-public:
-  SATBMarkQueue(SATBMarkQueueSet* qset, bool permanent = false);
-
   // Removes entries from the buffer that are no longer needed.
   template<typename Filter>
   inline void apply_filter(Filter filter_out);
 
+public:
+  SATBMarkQueue(SATBMarkQueueSet* qset, bool permanent = false);
+
   // Process queue entries and free resources.
   void flush();
 
@@ -90,29 +90,28 @@
 
 };
 
-class SATBMarkQueueFilter : public CHeapObj<mtGC> {
-public:
-  virtual ~SATBMarkQueueFilter() {}
-  virtual void filter(SATBMarkQueue* queue) = 0;
-};
-
 class SATBMarkQueueSet: public PtrQueueSet {
   SATBMarkQueue _shared_satb_queue;
-  SATBMarkQueueFilter* _filter;
 
 #ifdef ASSERT
   void dump_active_states(bool expected_active);
   void verify_active_states(bool expected_active);
 #endif // ASSERT
 
-public:
+protected:
   SATBMarkQueueSet();
+  ~SATBMarkQueueSet() {}
 
-  void initialize(SATBMarkQueueFilter* filter,
-                  Monitor* cbl_mon, Mutex* fl_lock,
+  template<typename Filter>
+  void apply_filter(Filter filter, SATBMarkQueue* queue) {
+    queue->apply_filter(filter);
+  }
+
+  void initialize(Monitor* cbl_mon, Mutex* fl_lock,
                   int process_completed_threshold,
                   Mutex* lock);
 
+public:
   virtual SATBMarkQueue& satb_queue_for_thread(JavaThread* const t) const = 0;
 
   // Apply "set_active(active)" to all SATB queues in the set. It should be
@@ -121,9 +120,7 @@
   // set itself, has an active value same as expected_active.
   void set_active_all_threads(bool active, bool expected_active);
 
-  void filter(SATBMarkQueue* queue) {
-    _filter->filter(queue);
-  }
+  virtual void filter(SATBMarkQueue* queue) = 0;
 
   // Filter all the currently-active SATB buffers.
   void filter_thread_buffers();