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

changeset 548
ba764ed4b6f2
parent 435
a61af66fc99e
child 631
d1605aabd0a1
     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() {

mercurial