hotspot/src/share/vm/gc/g1/g1OopClosures.hpp
changeset 32381 b750fd963056
parent 31976 da45f85bf4e1
child 32592 d066afd32088
equal deleted inserted replaced
32380:1dcdb686f0cb 32381:b750fd963056
    74   virtual void do_oop(narrowOop* p)    { do_oop_nv(p); }
    74   virtual void do_oop(narrowOop* p)    { do_oop_nv(p); }
    75 };
    75 };
    76 
    76 
    77 class G1ParScanClosure : public G1ParClosureSuper {
    77 class G1ParScanClosure : public G1ParClosureSuper {
    78 public:
    78 public:
    79   G1ParScanClosure(G1CollectedHeap* g1, ReferenceProcessor* rp) :
    79   G1ParScanClosure(G1CollectedHeap* g1) : G1ParClosureSuper(g1) { }
    80     G1ParClosureSuper(g1) {
       
    81     assert(_ref_processor == NULL, "sanity");
       
    82     _ref_processor = rp;
       
    83   }
       
    84 
    80 
    85   template <class T> void do_oop_nv(T* p);
    81   template <class T> void do_oop_nv(T* p);
    86   virtual void do_oop(oop* p)          { do_oop_nv(p); }
    82   virtual void do_oop(oop* p)          { do_oop_nv(p); }
    87   virtual void do_oop(narrowOop* p)    { do_oop_nv(p); }
    83   virtual void do_oop(narrowOop* p)    { do_oop_nv(p); }
       
    84 
       
    85   void set_ref_processor(ReferenceProcessor* ref_processor) { _ref_processor = ref_processor; }
    88 };
    86 };
    89 
    87 
    90 // Add back base class for metadata
    88 // Add back base class for metadata
    91 class G1ParCopyHelper : public G1ParClosureSuper {
    89 class G1ParCopyHelper : public G1ParClosureSuper {
    92 protected:
    90 protected:
   102   // objects pointed to by roots that have been forwarded during a
   100   // objects pointed to by roots that have been forwarded during a
   103   // GC. It is MT-safe.
   101   // GC. It is MT-safe.
   104   void mark_forwarded_object(oop from_obj, oop to_obj);
   102   void mark_forwarded_object(oop from_obj, oop to_obj);
   105  public:
   103  public:
   106   G1ParCopyHelper(G1CollectedHeap* g1,  G1ParScanThreadState* par_scan_state);
   104   G1ParCopyHelper(G1CollectedHeap* g1,  G1ParScanThreadState* par_scan_state);
       
   105   G1ParCopyHelper(G1CollectedHeap* g1);
   107 
   106 
   108   void set_scanned_klass(Klass* k) { _scanned_klass = k; }
   107   void set_scanned_klass(Klass* k) { _scanned_klass = k; }
   109   template <class T> void do_klass_barrier(T* p, oop new_obj);
   108   template <class T> void do_klass_barrier(T* p, oop new_obj);
   110 };
   109 };
   111 
   110 
   127 
   126 
   128 public:
   127 public:
   129   G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
   128   G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
   130                    ReferenceProcessor* rp) :
   129                    ReferenceProcessor* rp) :
   131       G1ParCopyHelper(g1, par_scan_state) {
   130       G1ParCopyHelper(g1, par_scan_state) {
       
   131     assert(_ref_processor == NULL, "sanity");
       
   132   }
       
   133 
       
   134   G1ParCopyClosure(G1CollectedHeap* g1) : G1ParCopyHelper(g1) {
   132     assert(_ref_processor == NULL, "sanity");
   135     assert(_ref_processor == NULL, "sanity");
   133   }
   136   }
   134 
   137 
   135   template <class T> void do_oop_nv(T* p) { do_oop_work(p); }
   138   template <class T> void do_oop_nv(T* p) { do_oop_work(p); }
   136   virtual void do_oop(oop* p)       { do_oop_nv(p); }
   139   virtual void do_oop(oop* p)       { do_oop_nv(p); }