228 double elapsed_time() const {
229 return os::elapsedTime() - _start;
230 }
231 };
232
233 class ParNewGenTask: public AbstractGangTask {
234 private:
235 ParNewGeneration* _young_gen;
236 Generation* _old_gen;
237 HeapWord* _young_old_boundary;
238 class ParScanThreadStateSet* _state_set;
239 StrongRootsScope* _strong_roots_scope;
240 OopStorage::ParState<false, false> _par_state_string;
241
242 public:
243 ParNewGenTask(ParNewGeneration* young_gen,
244 Generation* old_gen,
245 HeapWord* young_old_boundary,
246 ParScanThreadStateSet* state_set,
247 StrongRootsScope* strong_roots_scope);
248
249 HeapWord* young_old_boundary() { return _young_old_boundary; }
250
251 void work(uint worker_id);
252 };
253
254 class KeepAliveClosure: public DefNewGeneration::KeepAliveClosure {
255 protected:
256 template <class T> void do_oop_work(T* p);
257 public:
258 KeepAliveClosure(ScanWeakRefClosure* cl);
259 virtual void do_oop(oop* p);
260 virtual void do_oop(narrowOop* p);
261 };
262
263 template <typename OopClosureType1, typename OopClosureType2>
264 class EvacuateFollowersClosureGeneral: public VoidClosure {
265 private:
266 CMSHeap* _heap;
267 OopClosureType1* _scan_cur_or_nonheap;
|
228 double elapsed_time() const {
229 return os::elapsedTime() - _start;
230 }
231 };
232
233 class ParNewGenTask: public AbstractGangTask {
234 private:
235 ParNewGeneration* _young_gen;
236 Generation* _old_gen;
237 HeapWord* _young_old_boundary;
238 class ParScanThreadStateSet* _state_set;
239 StrongRootsScope* _strong_roots_scope;
240 OopStorage::ParState<false, false> _par_state_string;
241
242 public:
243 ParNewGenTask(ParNewGeneration* young_gen,
244 Generation* old_gen,
245 HeapWord* young_old_boundary,
246 ParScanThreadStateSet* state_set,
247 StrongRootsScope* strong_roots_scope);
248 ~ParNewGenTask();
249
250 HeapWord* young_old_boundary() { return _young_old_boundary; }
251
252 void work(uint worker_id);
253 };
254
255 class KeepAliveClosure: public DefNewGeneration::KeepAliveClosure {
256 protected:
257 template <class T> void do_oop_work(T* p);
258 public:
259 KeepAliveClosure(ScanWeakRefClosure* cl);
260 virtual void do_oop(oop* p);
261 virtual void do_oop(narrowOop* p);
262 };
263
264 template <typename OopClosureType1, typename OopClosureType2>
265 class EvacuateFollowersClosureGeneral: public VoidClosure {
266 private:
267 CMSHeap* _heap;
268 OopClosureType1* _scan_cur_or_nonheap;
|