src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp

Print this page
rev 5734 : 8027746: Remove do_gen_barrier template parameter in G1ParCopyClosure
Summary: Remove the above mentioned template parameter and related unused code. Also remove some classes that are never used.


  81   }
  82 
  83 public:
  84   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  85   virtual void do_oop(oop* p)       { do_oop_work(p); }
  86 
  87   void done () {
  88     if (_buffer_curr > _buffer) {
  89       process_buffer();
  90     }
  91   }
  92   double closure_app_seconds () {
  93     return _closure_app_seconds;
  94   }
  95   BufferingOopClosure (OopClosure *oc) :
  96     _oc(oc),
  97     _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength),
  98     _closure_app_seconds(0.0) { }
  99 };
 100 
 101 class BufferingOopsInGenClosure: public OopsInGenClosure {
 102   BufferingOopClosure _boc;
 103   OopsInGenClosure* _oc;
 104  protected:
 105   template <class T> inline void do_oop_work(T* p) {
 106     assert(generation()->is_in_reserved((void*)p), "Must be in!");
 107     _boc.do_oop(p);
 108   }
 109  public:
 110   BufferingOopsInGenClosure(OopsInGenClosure *oc) :
 111     _boc(oc), _oc(oc) {}
 112 
 113   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
 114   virtual void do_oop(oop* p)       { do_oop_work(p); }
 115 
 116   void done() {
 117     _boc.done();
 118   }
 119 
 120   double closure_app_seconds () {
 121     return _boc.closure_app_seconds();
 122   }
 123 
 124   void set_generation(Generation* gen) {
 125     OopsInGenClosure::set_generation(gen);
 126     _oc->set_generation(gen);
 127   }
 128 
 129   void reset_generation() {
 130     // Make sure we finish the current work with the current generation.
 131     _boc.done();
 132     OopsInGenClosure::reset_generation();
 133     _oc->reset_generation();
 134   }
 135 
 136 };
 137 
 138 
 139 class BufferingOopsInHeapRegionClosure: public OopsInHeapRegionClosure {
 140 private:
 141   enum PrivateConstants {
 142     BufferLength = 1024
 143   };
 144 
 145   StarTask     _buffer[BufferLength];
 146   StarTask*    _buffer_top;
 147   StarTask*    _buffer_curr;
 148 
 149   HeapRegion*  _hr_buffer[BufferLength];
 150   HeapRegion** _hr_curr;
 151 
 152   OopsInHeapRegionClosure*  _oc;
 153   double                    _closure_app_seconds;
 154 
 155   void process_buffer () {
 156 
 157     assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer),
 158            "the two lengths should be the same");
 159 
 160     double start = os::elapsedTime();
 161     HeapRegion** hr_curr = _hr_buffer;
 162     HeapRegion*  hr_prev = NULL;
 163     for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {
 164       HeapRegion* region = *hr_curr;
 165       if (region != hr_prev) {
 166         _oc->set_region(region);
 167         hr_prev = region;
 168       }
 169       if (curr->is_narrow()) {
 170         assert(UseCompressedOops, "Error");
 171         _oc->do_oop((narrowOop*)(*curr));
 172       } else {
 173         _oc->do_oop((oop*)(*curr));
 174       }
 175       ++hr_curr;
 176     }
 177     _buffer_curr = _buffer;
 178     _hr_curr = _hr_buffer;
 179     _closure_app_seconds += (os::elapsedTime() - start);
 180   }
 181 
 182 public:
 183   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
 184   virtual void do_oop(      oop* p) { do_oop_work(p); }
 185 
 186   template <class T> void do_oop_work(T* p) {
 187     if (_buffer_curr == _buffer_top) {
 188       assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
 189       process_buffer();
 190     }
 191     StarTask new_ref(p);
 192     *_buffer_curr = new_ref;
 193     ++_buffer_curr;
 194     *_hr_curr = _from;
 195     ++_hr_curr;
 196   }
 197   void done () {
 198     if (_buffer_curr > _buffer) {
 199       assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
 200       process_buffer();
 201     }
 202   }
 203   double closure_app_seconds () {
 204     return _closure_app_seconds;
 205   }
 206   BufferingOopsInHeapRegionClosure (OopsInHeapRegionClosure *oc) :
 207     _oc(oc),
 208     _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength),
 209     _hr_curr(_hr_buffer),
 210     _closure_app_seconds(0.0) { }
 211 };
 212 
 213 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP


  81   }
  82 
  83 public:
  84   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  85   virtual void do_oop(oop* p)       { do_oop_work(p); }
  86 
  87   void done () {
  88     if (_buffer_curr > _buffer) {
  89       process_buffer();
  90     }
  91   }
  92   double closure_app_seconds () {
  93     return _closure_app_seconds;
  94   }
  95   BufferingOopClosure (OopClosure *oc) :
  96     _oc(oc),
  97     _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength),
  98     _closure_app_seconds(0.0) { }
  99 };
 100 
















































































































 101 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP