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 };