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

Print this page
rev 3463 : 7114678: G1: various small fixes, code cleanup, and refactoring
Summary: Various cleanups as a prelude to introducing iterators for HeapRegions.
Reviewed-by: johnc
Contributed-by: tonyp


 180   G1CollectedHeap* _g1;
 181   OopClosure* _oc;
 182   DirtyCardToOopClosure* _dcto_cl;
 183 public:
 184   FilterIntoCSClosure(  DirtyCardToOopClosure* dcto_cl,
 185                         G1CollectedHeap* g1,
 186                         OopClosure* oc) :
 187     _dcto_cl(dcto_cl), _g1(g1), _oc(oc) { }
 188 
 189   template <class T> void do_oop_nv(T* p);
 190   virtual void do_oop(oop* p)        { do_oop_nv(p); }
 191   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 192   bool apply_to_weak_ref_discovered_field() { return true; }
 193   bool do_header() { return false; }
 194 };
 195 
 196 class FilterOutOfRegionClosure: public OopClosure {
 197   HeapWord* _r_bottom;
 198   HeapWord* _r_end;
 199   OopClosure* _oc;
 200   int _out_of_region;
 201 public:
 202   FilterOutOfRegionClosure(HeapRegion* r, OopClosure* oc);
 203   template <class T> void do_oop_nv(T* p);
 204   virtual void do_oop(oop* p) { do_oop_nv(p); }
 205   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 206   bool apply_to_weak_ref_discovered_field() { return true; }
 207   bool do_header() { return false; }
 208   int out_of_region() { return _out_of_region; }
 209 };
 210 
 211 // Closure for iterating over object fields during concurrent marking
 212 class G1CMOopClosure : public OopClosure {
 213 private:
 214   G1CollectedHeap*   _g1h;
 215   ConcurrentMark*    _cm;
 216   CMTask*            _task;
 217 public:
 218   G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task);
 219   template <class T> void do_oop_nv(T* p);
 220   virtual void do_oop(      oop* p) { do_oop_nv(p); }
 221   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 222 };
 223 
 224 // Closure to scan the root regions during concurrent marking
 225 class G1RootRegionScanClosure : public OopClosure {
 226 private:
 227   G1CollectedHeap* _g1h;
 228   ConcurrentMark*  _cm;




 180   G1CollectedHeap* _g1;
 181   OopClosure* _oc;
 182   DirtyCardToOopClosure* _dcto_cl;
 183 public:
 184   FilterIntoCSClosure(  DirtyCardToOopClosure* dcto_cl,
 185                         G1CollectedHeap* g1,
 186                         OopClosure* oc) :
 187     _dcto_cl(dcto_cl), _g1(g1), _oc(oc) { }
 188 
 189   template <class T> void do_oop_nv(T* p);
 190   virtual void do_oop(oop* p)        { do_oop_nv(p); }
 191   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 192   bool apply_to_weak_ref_discovered_field() { return true; }
 193   bool do_header() { return false; }
 194 };
 195 
 196 class FilterOutOfRegionClosure: public OopClosure {
 197   HeapWord* _r_bottom;
 198   HeapWord* _r_end;
 199   OopClosure* _oc;

 200 public:
 201   FilterOutOfRegionClosure(HeapRegion* r, OopClosure* oc);
 202   template <class T> void do_oop_nv(T* p);
 203   virtual void do_oop(oop* p) { do_oop_nv(p); }
 204   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 205   bool apply_to_weak_ref_discovered_field() { return true; }
 206   bool do_header() { return false; }

 207 };
 208 
 209 // Closure for iterating over object fields during concurrent marking
 210 class G1CMOopClosure : public OopClosure {
 211 private:
 212   G1CollectedHeap*   _g1h;
 213   ConcurrentMark*    _cm;
 214   CMTask*            _task;
 215 public:
 216   G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task);
 217   template <class T> void do_oop_nv(T* p);
 218   virtual void do_oop(      oop* p) { do_oop_nv(p); }
 219   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 220 };
 221 
 222 // Closure to scan the root regions during concurrent marking
 223 class G1RootRegionScanClosure : public OopClosure {
 224 private:
 225   G1CollectedHeap* _g1h;
 226   ConcurrentMark*  _cm;