src/share/vm/gc_implementation/parNew/parOopClosures.hpp

changeset 548
ba764ed4b6f2
parent 435
a61af66fc99e
child 1907
c18cbe5936b8
     1.1 --- a/src/share/vm/gc_implementation/parNew/parOopClosures.hpp	Fri Apr 11 09:56:35 2008 -0400
     1.2 +++ b/src/share/vm/gc_implementation/parNew/parOopClosures.hpp	Sun Apr 13 17:43:42 2008 -0400
     1.3 @@ -26,70 +26,77 @@
     1.4  
     1.5  class ParScanThreadState;
     1.6  class ParNewGeneration;
     1.7 -template<class E> class GenericTaskQueueSet;
     1.8 -typedef GenericTaskQueueSet<oop> ObjToScanQueueSet;
     1.9 +typedef OopTaskQueueSet ObjToScanQueueSet;
    1.10  class ParallelTaskTerminator;
    1.11  
    1.12  class ParScanClosure: public OopsInGenClosure {
    1.13 -protected:
    1.14 + protected:
    1.15    ParScanThreadState* _par_scan_state;
    1.16 -  ParNewGeneration* _g;
    1.17 -  HeapWord* _boundary;
    1.18 -  void do_oop_work(oop* p,
    1.19 -                          bool gc_barrier,
    1.20 -                          bool root_scan);
    1.21 -
    1.22 -  void par_do_barrier(oop* p);
    1.23 -
    1.24 -public:
    1.25 +  ParNewGeneration*   _g;
    1.26 +  HeapWord*           _boundary;
    1.27 +  template <class T> void inline par_do_barrier(T* p);
    1.28 +  template <class T> void inline do_oop_work(T* p,
    1.29 +                                             bool gc_barrier,
    1.30 +                                             bool root_scan);
    1.31 + public:
    1.32    ParScanClosure(ParNewGeneration* g, ParScanThreadState* par_scan_state);
    1.33  };
    1.34  
    1.35  class ParScanWithBarrierClosure: public ParScanClosure {
    1.36 -public:
    1.37 -  void do_oop(oop* p)    { do_oop_work(p, true, false); }
    1.38 -  void do_oop_nv(oop* p) { do_oop_work(p, true, false); }
    1.39 + public:
    1.40    ParScanWithBarrierClosure(ParNewGeneration* g,
    1.41                              ParScanThreadState* par_scan_state) :
    1.42      ParScanClosure(g, par_scan_state) {}
    1.43 +  virtual void do_oop(oop* p);
    1.44 +  virtual void do_oop(narrowOop* p);
    1.45 +  inline void do_oop_nv(oop* p);
    1.46 +  inline void do_oop_nv(narrowOop* p);
    1.47  };
    1.48  
    1.49  class ParScanWithoutBarrierClosure: public ParScanClosure {
    1.50 -public:
    1.51 + public:
    1.52    ParScanWithoutBarrierClosure(ParNewGeneration* g,
    1.53                                 ParScanThreadState* par_scan_state) :
    1.54      ParScanClosure(g, par_scan_state) {}
    1.55 -  void do_oop(oop* p)    { do_oop_work(p, false, false); }
    1.56 -  void do_oop_nv(oop* p) { do_oop_work(p, false, false); }
    1.57 +  virtual void do_oop(oop* p);
    1.58 +  virtual void do_oop(narrowOop* p);
    1.59 +  inline void do_oop_nv(oop* p);
    1.60 +  inline void do_oop_nv(narrowOop* p);
    1.61  };
    1.62  
    1.63  class ParRootScanWithBarrierTwoGensClosure: public ParScanClosure {
    1.64 -public:
    1.65 + public:
    1.66    ParRootScanWithBarrierTwoGensClosure(ParNewGeneration* g,
    1.67                                         ParScanThreadState* par_scan_state) :
    1.68      ParScanClosure(g, par_scan_state) {}
    1.69 -  void do_oop(oop* p) { do_oop_work(p, true, true); }
    1.70 +  virtual void do_oop(oop* p);
    1.71 +  virtual void do_oop(narrowOop* p);
    1.72  };
    1.73  
    1.74  class ParRootScanWithoutBarrierClosure: public ParScanClosure {
    1.75 -public:
    1.76 + public:
    1.77    ParRootScanWithoutBarrierClosure(ParNewGeneration* g,
    1.78                                     ParScanThreadState* par_scan_state) :
    1.79      ParScanClosure(g, par_scan_state) {}
    1.80 -  void do_oop(oop* p) { do_oop_work(p, false, true); }
    1.81 +  virtual void do_oop(oop* p);
    1.82 +  virtual void do_oop(narrowOop* p);
    1.83  };
    1.84  
    1.85  class ParScanWeakRefClosure: public ScanWeakRefClosure {
    1.86 -protected:
    1.87 + protected:
    1.88    ParScanThreadState* _par_scan_state;
    1.89 -public:
    1.90 +  template <class T> inline void do_oop_work(T* p);
    1.91 + public:
    1.92    ParScanWeakRefClosure(ParNewGeneration* g,
    1.93                          ParScanThreadState* par_scan_state);
    1.94 -  void do_oop(oop* p);
    1.95 -  void do_oop_nv(oop* p);
    1.96 +  virtual void do_oop(oop* p);
    1.97 +  virtual void do_oop(narrowOop* p);
    1.98 +  inline void do_oop_nv(oop* p);
    1.99 +  inline void do_oop_nv(narrowOop* p);
   1.100  };
   1.101  
   1.102  class ParEvacuateFollowersClosure: public VoidClosure {
   1.103 + private:
   1.104    ParScanThreadState* _par_scan_state;
   1.105    ParScanThreadState* par_scan_state() { return _par_scan_state; }
   1.106  
   1.107 @@ -121,8 +128,7 @@
   1.108  
   1.109    ParallelTaskTerminator* _terminator;
   1.110    ParallelTaskTerminator* terminator() { return _terminator; }
   1.111 -
   1.112 -public:
   1.113 + public:
   1.114    ParEvacuateFollowersClosure(
   1.115      ParScanThreadState* par_scan_state_,
   1.116      ParScanWithoutBarrierClosure* to_space_closure_,
   1.117 @@ -132,5 +138,5 @@
   1.118      ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure_,
   1.119      ObjToScanQueueSet* task_queues_,
   1.120      ParallelTaskTerminator* terminator_);
   1.121 -  void do_void();
   1.122 +  virtual void do_void();
   1.123  };

mercurial