1.1 --- a/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp Fri Apr 11 09:56:35 2008 -0400 1.2 +++ b/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp Sun Apr 13 17:43:42 2008 -0400 1.3 @@ -33,7 +33,6 @@ 1.4 // but they must be here to allow ParScanClosure::do_oop_work to be defined 1.5 // in genOopClosures.inline.hpp. 1.6 1.7 - 1.8 typedef OopTaskQueue ObjToScanQueue; 1.9 typedef OopTaskQueueSet ObjToScanQueueSet; 1.10 1.11 @@ -41,15 +40,20 @@ 1.12 const int PAR_STATS_ENABLED = 0; 1.13 1.14 class ParKeepAliveClosure: public DefNewGeneration::KeepAliveClosure { 1.15 + private: 1.16 ParScanWeakRefClosure* _par_cl; 1.17 + protected: 1.18 + template <class T> void do_oop_work(T* p); 1.19 public: 1.20 ParKeepAliveClosure(ParScanWeakRefClosure* cl); 1.21 - void do_oop(oop* p); 1.22 + virtual void do_oop(oop* p); 1.23 + virtual void do_oop(narrowOop* p); 1.24 }; 1.25 1.26 // The state needed by thread performing parallel young-gen collection. 1.27 class ParScanThreadState { 1.28 friend class ParScanThreadStateSet; 1.29 + private: 1.30 ObjToScanQueue *_work_queue; 1.31 1.32 ParGCAllocBuffer _to_space_alloc_buffer; 1.33 @@ -111,7 +115,7 @@ 1.34 ObjToScanQueueSet* work_queue_set_, size_t desired_plab_sz_, 1.35 ParallelTaskTerminator& term_); 1.36 1.37 -public: 1.38 + public: 1.39 ageTable* age_table() {return &_ageTable;} 1.40 1.41 ObjToScanQueue* work_queue() { return _work_queue; } 1.42 @@ -195,13 +199,13 @@ 1.43 double elapsed() { 1.44 return os::elapsedTime() - _start; 1.45 } 1.46 - 1.47 }; 1.48 1.49 class ParNewGenTask: public AbstractGangTask { 1.50 - ParNewGeneration* _gen; 1.51 - Generation* _next_gen; 1.52 - HeapWord* _young_old_boundary; 1.53 + private: 1.54 + ParNewGeneration* _gen; 1.55 + Generation* _next_gen; 1.56 + HeapWord* _young_old_boundary; 1.57 class ParScanThreadStateSet* _state_set; 1.58 1.59 public: 1.60 @@ -216,35 +220,44 @@ 1.61 }; 1.62 1.63 class KeepAliveClosure: public DefNewGeneration::KeepAliveClosure { 1.64 + protected: 1.65 + template <class T> void do_oop_work(T* p); 1.66 public: 1.67 KeepAliveClosure(ScanWeakRefClosure* cl); 1.68 - void do_oop(oop* p); 1.69 + virtual void do_oop(oop* p); 1.70 + virtual void do_oop(narrowOop* p); 1.71 }; 1.72 1.73 class EvacuateFollowersClosureGeneral: public VoidClosure { 1.74 - GenCollectedHeap* _gch; 1.75 - int _level; 1.76 - OopsInGenClosure* _scan_cur_or_nonheap; 1.77 - OopsInGenClosure* _scan_older; 1.78 - public: 1.79 - EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level, 1.80 - OopsInGenClosure* cur, 1.81 - OopsInGenClosure* older); 1.82 - void do_void(); 1.83 + private: 1.84 + GenCollectedHeap* _gch; 1.85 + int _level; 1.86 + OopsInGenClosure* _scan_cur_or_nonheap; 1.87 + OopsInGenClosure* _scan_older; 1.88 + public: 1.89 + EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level, 1.90 + OopsInGenClosure* cur, 1.91 + OopsInGenClosure* older); 1.92 + virtual void do_void(); 1.93 }; 1.94 1.95 // Closure for scanning ParNewGeneration. 1.96 // Same as ScanClosure, except does parallel GC barrier. 1.97 class ScanClosureWithParBarrier: public ScanClosure { 1.98 -public: 1.99 + protected: 1.100 + template <class T> void do_oop_work(T* p); 1.101 + public: 1.102 ScanClosureWithParBarrier(ParNewGeneration* g, bool gc_barrier); 1.103 - void do_oop(oop* p); 1.104 + virtual void do_oop(oop* p); 1.105 + virtual void do_oop(narrowOop* p); 1.106 }; 1.107 1.108 // Implements AbstractRefProcTaskExecutor for ParNew. 1.109 class ParNewRefProcTaskExecutor: public AbstractRefProcTaskExecutor { 1.110 -public: 1.111 - 1.112 + private: 1.113 + ParNewGeneration& _generation; 1.114 + ParScanThreadStateSet& _state_set; 1.115 + public: 1.116 ParNewRefProcTaskExecutor(ParNewGeneration& generation, 1.117 ParScanThreadStateSet& state_set) 1.118 : _generation(generation), _state_set(state_set) 1.119 @@ -255,9 +268,6 @@ 1.120 virtual void execute(EnqueueTask& task); 1.121 // Switch to single threaded mode. 1.122 virtual void set_single_threaded_mode(); 1.123 -private: 1.124 - ParNewGeneration& _generation; 1.125 - ParScanThreadStateSet& _state_set; 1.126 }; 1.127 1.128 1.129 @@ -269,6 +279,7 @@ 1.130 friend class ParNewRefProcTaskExecutor; 1.131 friend class ParScanThreadStateSet; 1.132 1.133 + private: 1.134 // XXX use a global constant instead of 64! 1.135 struct ObjToScanQueuePadded { 1.136 ObjToScanQueue work_queue; 1.137 @@ -314,7 +325,7 @@ 1.138 // the details of the policy. 1.139 virtual void adjust_desired_tenuring_threshold(); 1.140 1.141 -public: 1.142 + public: 1.143 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level); 1.144 1.145 ~ParNewGeneration() {