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