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;
|