< prev index next >

src/hotspot/share/gc/shared/referenceProcessor.hpp

Print this page
rev 49944 : imported patch 8201492-properly-implement-non-contiguous-reference-processing
rev 49945 : imported patch 8201492-stefanj-review

@@ -327,12 +327,12 @@
   void balance_queues(DiscoveredList ref_lists[]);
 
   // Update (advance) the soft ref master clock field.
   void update_soft_ref_master_clock();
 
-  template <class T>
-  bool is_subject_to_discovery(T const obj) const;
+  bool is_subject_to_discovery(oop const obj) const;
+
 public:
   // Default parameters give you a vanilla reference processor.
   ReferenceProcessor(BoolObjectClosure* is_subject_to_discovery,
                      bool mt_processing = false, uint mt_processing_degree = 1,
                      bool mt_discovery  = false, uint mt_discovery_degree  = 1,

@@ -417,35 +417,28 @@
   // debugging
   void verify_no_references_recorded() PRODUCT_RETURN;
   void verify_referent(oop obj)        PRODUCT_RETURN;
 };
 
-// A reference processor that uses a single memory span to determine the area that
+// A subject-to-discovery closure that uses a single memory span to determine the area that
 // is subject to discovery. Useful for collectors which have contiguous generations.
-class SpanReferenceProcessor : public ReferenceProcessor {
-  class SpanBasedDiscoverer : public BoolObjectClosure {
-  public:
+class SpanSubjectToDiscoveryClosure : public BoolObjectClosure {
     MemRegion _span;
 
-    SpanBasedDiscoverer(MemRegion span) : BoolObjectClosure(), _span(span) { }
+public:
+  SpanSubjectToDiscoveryClosure() : BoolObjectClosure(), _span() { }
+  SpanSubjectToDiscoveryClosure(MemRegion span) : BoolObjectClosure(), _span(span) { }
+
+  MemRegion span() const { return _span; }
+
+  void set_span(MemRegion mr) {
+    _span = mr;
+  }
 
     virtual bool do_object_b(oop obj) {
       return _span.contains(obj);
     }
-  };
-
-  SpanBasedDiscoverer _span_based_discoverer;
-public:
-  SpanReferenceProcessor(MemRegion span,
-                              bool mt_processing = false, uint mt_processing_degree = 1,
-                              bool mt_discovery  = false, uint mt_discovery_degree  = 1,
-                              bool atomic_discovery = true,
-                              BoolObjectClosure* is_alive_non_header = NULL);
-
-  // get and set span
-  MemRegion span()                   { return _span_based_discoverer._span; }
-  void      set_span(MemRegion span) { _span_based_discoverer._span = span; }
 };
 
 // A utility class to disable reference discovery in
 // the scope which contains it, for given ReferenceProcessor.
 class NoRefDiscovery: StackObj {

@@ -468,15 +461,14 @@
 };
 
 // A utility class to temporarily mutate the subject discovery closure of the
 // given ReferenceProcessor in the scope that contains it.
 class ReferenceProcessorSubjectToDiscoveryMutator : StackObj {
- private:
   ReferenceProcessor* _rp;
   BoolObjectClosure* _saved_cl;
 
- public:
+public:
   ReferenceProcessorSubjectToDiscoveryMutator(ReferenceProcessor* rp, BoolObjectClosure* cl):
     _rp(rp) {
     _saved_cl = _rp->is_subject_to_discovery_closure();
     _rp->set_is_subject_to_discovery_closure(cl);
   }

@@ -486,25 +478,25 @@
   }
 };
 
 // A utility class to temporarily mutate the span of the
 // given ReferenceProcessor in the scope that contains it.
-class ReferenceProcessorSpanMutator: StackObj {
- private:
-  SpanReferenceProcessor* _rp;
-  MemRegion _saved_span;
+class ReferenceProcessorSpanMutator : StackObj {
+  ReferenceProcessor* _rp;
+  SpanSubjectToDiscoveryClosure _discoverer;
+  BoolObjectClosure* _old_discoverer;
 
- public:
-  ReferenceProcessorSpanMutator(SpanReferenceProcessor* rp,
+public:
+  ReferenceProcessorSpanMutator(ReferenceProcessor* rp,
                                 MemRegion span):
-    _rp(rp) {
-    _saved_span = _rp->span();
-    _rp->set_span(span);
+    _rp(rp), _discoverer(span) {
+    _old_discoverer = rp->is_subject_to_discovery_closure();
+    rp->set_is_subject_to_discovery_closure(&_discoverer);
   }
 
   ~ReferenceProcessorSpanMutator() {
-    _rp->set_span(_saved_span);
+    _rp->set_is_subject_to_discovery_closure(_old_discoverer);
   }
 };
 
 // A utility class to temporarily change the MT'ness of
 // reference discovery for the given ReferenceProcessor
< prev index next >