182
183 bool apply_to_weak_ref_discovered_field() { return true; }
184
185 template <class T> void do_oop_nv(T* p);
186 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
187 virtual void do_oop(oop* p) { do_oop_nv(p); }
188 };
189
190 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
191 G1CollectedHeap* _g1;
192 HeapRegion* _from;
193 G1ParPushHeapRSClosure* _push_ref_cl;
194 bool _record_refs_into_cset;
195 uint _worker_i;
196 bool _has_refs_into_cset;
197
198 public:
199 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
200 G1ParPushHeapRSClosure* push_ref_cl,
201 bool record_refs_into_cset,
202 uint worker_i = 0);
203
204 void set_from(HeapRegion* from) {
205 assert(from != NULL, "from region must be non-NULL");
206 _from = from;
207 }
208
209 bool apply_to_weak_ref_discovered_field() { return true; }
210
211 bool self_forwarded(oop obj) {
212 markOop m = obj->mark();
213 bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
214 return result;
215 }
216
217 bool has_refs_into_cset() const { return _has_refs_into_cset; }
218
219 template <class T> inline void do_oop_nv(T* p);
220 virtual inline void do_oop(narrowOop* p);
221 virtual inline void do_oop(oop* p);
222 };
|
182
183 bool apply_to_weak_ref_discovered_field() { return true; }
184
185 template <class T> void do_oop_nv(T* p);
186 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
187 virtual void do_oop(oop* p) { do_oop_nv(p); }
188 };
189
190 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
191 G1CollectedHeap* _g1;
192 HeapRegion* _from;
193 G1ParPushHeapRSClosure* _push_ref_cl;
194 bool _record_refs_into_cset;
195 uint _worker_i;
196 bool _has_refs_into_cset;
197
198 public:
199 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
200 G1ParPushHeapRSClosure* push_ref_cl,
201 bool record_refs_into_cset,
202 uint worker_i);
203
204 void set_from(HeapRegion* from) {
205 assert(from != NULL, "from region must be non-NULL");
206 _from = from;
207 }
208
209 bool apply_to_weak_ref_discovered_field() { return true; }
210
211 bool self_forwarded(oop obj) {
212 markOop m = obj->mark();
213 bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
214 return result;
215 }
216
217 bool has_refs_into_cset() const { return _has_refs_into_cset; }
218
219 template <class T> inline void do_oop_nv(T* p);
220 virtual inline void do_oop(narrowOop* p);
221 virtual inline void do_oop(oop* p);
222 };
|