222 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
223 };
224
225 // A closure which uses a triggering closure to determine
226 // whether to apply an oop closure.
227
228 class G1InvokeIfNotTriggeredClosure: public ExtendedOopClosure {
229 G1TriggerClosure* _trigger_cl;
230 OopClosure* _oop_cl;
231 public:
232 G1InvokeIfNotTriggeredClosure(G1TriggerClosure* t, OopClosure* oc);
233 template <class T> void do_oop_nv(T* p);
234 virtual void do_oop(oop* p) { do_oop_nv(p); }
235 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
236 };
237
238 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
239 G1CollectedHeap* _g1;
240 G1RemSet* _g1_rem_set;
241 HeapRegion* _from;
242 OopsInHeapRegionClosure* _push_ref_cl;
243 bool _record_refs_into_cset;
244 uint _worker_i;
245
246 public:
247 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
248 G1RemSet* rs,
249 OopsInHeapRegionClosure* push_ref_cl,
250 bool record_refs_into_cset,
251 uint worker_i = 0);
252
253 void set_from(HeapRegion* from) {
254 assert(from != NULL, "from region must be non-NULL");
255 _from = from;
256 }
257
258 bool self_forwarded(oop obj) {
259 bool result = (obj->is_forwarded() && (obj->forwardee()== obj));
260 return result;
261 }
262
263 bool apply_to_weak_ref_discovered_field() { return true; }
264
265 template <class T> void do_oop_nv(T* p);
266 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
267 virtual void do_oop(oop* p) { do_oop_nv(p); }
268 };
269
|
222 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
223 };
224
225 // A closure which uses a triggering closure to determine
226 // whether to apply an oop closure.
227
228 class G1InvokeIfNotTriggeredClosure: public ExtendedOopClosure {
229 G1TriggerClosure* _trigger_cl;
230 OopClosure* _oop_cl;
231 public:
232 G1InvokeIfNotTriggeredClosure(G1TriggerClosure* t, OopClosure* oc);
233 template <class T> void do_oop_nv(T* p);
234 virtual void do_oop(oop* p) { do_oop_nv(p); }
235 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
236 };
237
238 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
239 G1CollectedHeap* _g1;
240 G1RemSet* _g1_rem_set;
241 HeapRegion* _from;
242 G1ParPushHeapRSClosure* _push_ref_cl;
243 bool _record_refs_into_cset;
244 uint _worker_i;
245
246 public:
247 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
248 G1RemSet* rs,
249 G1ParPushHeapRSClosure* push_ref_cl,
250 bool record_refs_into_cset,
251 uint worker_i = 0);
252
253 void set_from(HeapRegion* from) {
254 assert(from != NULL, "from region must be non-NULL");
255 _from = from;
256 }
257
258 bool self_forwarded(oop obj) {
259 bool result = (obj->is_forwarded() && (obj->forwardee()== obj));
260 return result;
261 }
262
263 bool apply_to_weak_ref_discovered_field() { return true; }
264
265 template <class T> void do_oop_nv(T* p);
266 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
267 virtual void do_oop(oop* p) { do_oop_nv(p); }
268 };
269
|