src/hotspot/share/gc/cms/parNewGeneration.cpp
changeset 52905 bec57b4a6d69
parent 52904 d2f118d3f8e7
child 53536 482109fae02b
equal deleted inserted replaced
52904:d2f118d3f8e7 52905:bec57b4a6d69
    73                                        int thread_num_,
    73                                        int thread_num_,
    74                                        ObjToScanQueueSet* work_queue_set_,
    74                                        ObjToScanQueueSet* work_queue_set_,
    75                                        Stack<oop, mtGC>* overflow_stacks_,
    75                                        Stack<oop, mtGC>* overflow_stacks_,
    76                                        PreservedMarks* preserved_marks_,
    76                                        PreservedMarks* preserved_marks_,
    77                                        size_t desired_plab_sz_,
    77                                        size_t desired_plab_sz_,
    78                                        ParallelTaskTerminator& term_) :
    78                                        TaskTerminator& term_) :
    79   _work_queue(work_queue_set_->queue(thread_num_)),
    79   _work_queue(work_queue_set_->queue(thread_num_)),
    80   _overflow_stack(overflow_stacks_ ? overflow_stacks_ + thread_num_ : NULL),
    80   _overflow_stack(overflow_stacks_ ? overflow_stacks_ + thread_num_ : NULL),
    81   _preserved_marks(preserved_marks_),
    81   _preserved_marks(preserved_marks_),
    82   _to_space_alloc_buffer(desired_plab_sz_),
    82   _to_space_alloc_buffer(desired_plab_sz_),
    83   _to_space_closure(young_gen_, this),
    83   _to_space_closure(young_gen_, this),
    85   _to_space_root_closure(young_gen_, this),
    85   _to_space_root_closure(young_gen_, this),
    86   _older_gen_closure(young_gen_, this),
    86   _older_gen_closure(young_gen_, this),
    87   _old_gen_root_closure(young_gen_, this),
    87   _old_gen_root_closure(young_gen_, this),
    88   _evacuate_followers(this, &_to_space_closure, &_old_gen_closure,
    88   _evacuate_followers(this, &_to_space_closure, &_old_gen_closure,
    89                       &_to_space_root_closure, young_gen_, &_old_gen_root_closure,
    89                       &_to_space_root_closure, young_gen_, &_old_gen_root_closure,
    90                       work_queue_set_, &term_),
    90                       work_queue_set_, term_.terminator()),
    91   _is_alive_closure(young_gen_),
    91   _is_alive_closure(young_gen_),
    92   _scan_weak_ref_closure(young_gen_, this),
    92   _scan_weak_ref_closure(young_gen_, this),
    93   _keep_alive_closure(&_scan_weak_ref_closure),
    93   _keep_alive_closure(&_scan_weak_ref_closure),
    94   _to_space(to_space_),
    94   _to_space(to_space_),
    95   _young_gen(young_gen_),
    95   _young_gen(young_gen_),
   304                         Generation&             old_gen,
   304                         Generation&             old_gen,
   305                         ObjToScanQueueSet&      queue_set,
   305                         ObjToScanQueueSet&      queue_set,
   306                         Stack<oop, mtGC>*       overflow_stacks_,
   306                         Stack<oop, mtGC>*       overflow_stacks_,
   307                         PreservedMarksSet&      preserved_marks_set,
   307                         PreservedMarksSet&      preserved_marks_set,
   308                         size_t                  desired_plab_sz,
   308                         size_t                  desired_plab_sz,
   309                         ParallelTaskTerminator& term);
   309                         TaskTerminator& term);
   310 
   310 
   311   ~ParScanThreadStateSet() { TASKQUEUE_STATS_ONLY(reset_stats()); }
   311   ~ParScanThreadStateSet() { TASKQUEUE_STATS_ONLY(reset_stats()); }
   312 
   312 
   313   inline ParScanThreadState& thread_state(int i);
   313   inline ParScanThreadState& thread_state(int i);
   314 
   314 
   325   void print_taskqueue_stats();
   325   void print_taskqueue_stats();
   326   void reset_stats();
   326   void reset_stats();
   327   #endif // TASKQUEUE_STATS
   327   #endif // TASKQUEUE_STATS
   328 
   328 
   329 private:
   329 private:
   330   ParallelTaskTerminator& _term;
   330   TaskTerminator&         _term;
   331   ParNewGeneration&       _young_gen;
   331   ParNewGeneration&       _young_gen;
   332   Generation&             _old_gen;
   332   Generation&             _old_gen;
   333   ParScanThreadState*     _per_thread_states;
   333   ParScanThreadState*     _per_thread_states;
   334   const int               _num_threads;
   334   const int               _num_threads;
   335  public:
   335  public:
   336   bool is_valid(int id) const { return id < _num_threads; }
   336   bool is_valid(int id) const { return id < _num_threads; }
   337   ParallelTaskTerminator* terminator() { return &_term; }
   337   ParallelTaskTerminator* terminator() { return _term.terminator(); }
   338 };
   338 };
   339 
   339 
   340 ParScanThreadStateSet::ParScanThreadStateSet(int num_threads,
   340 ParScanThreadStateSet::ParScanThreadStateSet(int num_threads,
   341                                              Space& to_space,
   341                                              Space& to_space,
   342                                              ParNewGeneration& young_gen,
   342                                              ParNewGeneration& young_gen,
   343                                              Generation& old_gen,
   343                                              Generation& old_gen,
   344                                              ObjToScanQueueSet& queue_set,
   344                                              ObjToScanQueueSet& queue_set,
   345                                              Stack<oop, mtGC>* overflow_stacks,
   345                                              Stack<oop, mtGC>* overflow_stacks,
   346                                              PreservedMarksSet& preserved_marks_set,
   346                                              PreservedMarksSet& preserved_marks_set,
   347                                              size_t desired_plab_sz,
   347                                              size_t desired_plab_sz,
   348                                              ParallelTaskTerminator& term)
   348                                              TaskTerminator& term)
   349   : _term(term),
   349   : _term(term),
   350     _young_gen(young_gen),
   350     _young_gen(young_gen),
   351     _old_gen(old_gen),
   351     _old_gen(old_gen),
   352     _per_thread_states(NEW_RESOURCE_ARRAY(ParScanThreadState, num_threads)),
   352     _per_thread_states(NEW_RESOURCE_ARRAY(ParScanThreadState, num_threads)),
   353     _num_threads(num_threads)
   353     _num_threads(num_threads)
   377     }
   377     }
   378   }
   378   }
   379 }
   379 }
   380 
   380 
   381 void ParScanThreadStateSet::reset(uint active_threads, bool promotion_failed) {
   381 void ParScanThreadStateSet::reset(uint active_threads, bool promotion_failed) {
   382   _term.reset_for_reuse(active_threads);
   382   _term.terminator()->reset_for_reuse(active_threads);
   383   if (promotion_failed) {
   383   if (promotion_failed) {
   384     for (int i = 0; i < _num_threads; ++i) {
   384     for (int i = 0; i < _num_threads; ++i) {
   385       thread_state(i).print_promotion_failure_size();
   385       thread_state(i).print_promotion_failure_size();
   386     }
   386     }
   387   }
   387   }
   902   // Need to initialize the preserved marks before the ThreadStateSet c'tor.
   902   // Need to initialize the preserved marks before the ThreadStateSet c'tor.
   903   _preserved_marks_set.init(active_workers);
   903   _preserved_marks_set.init(active_workers);
   904 
   904 
   905   // Always set the terminator for the active number of workers
   905   // Always set the terminator for the active number of workers
   906   // because only those workers go through the termination protocol.
   906   // because only those workers go through the termination protocol.
   907   ParallelTaskTerminator _term(active_workers, task_queues());
   907   TaskTerminator _term(active_workers, task_queues());
   908   ParScanThreadStateSet thread_state_set(active_workers,
   908   ParScanThreadStateSet thread_state_set(active_workers,
   909                                          *to(), *this, *_old_gen, *task_queues(),
   909                                          *to(), *this, *_old_gen, *task_queues(),
   910                                          _overflow_stacks, _preserved_marks_set,
   910                                          _overflow_stacks, _preserved_marks_set,
   911                                          desired_plab_sz(), _term);
   911                                          desired_plab_sz(), _term);
   912 
   912