39 class ReferenceProcessor;
40
41 // A class that scans oops in a given heap region (much as OopsInGenClosure
42 // scans oops in a generation.)
43 class OopsInHeapRegionClosure: public ExtendedOopClosure {
44 protected:
45 HeapRegion* _from;
46 public:
47 void set_region(HeapRegion* from) { _from = from; }
48 };
49
50 class G1ParClosureSuper : public OopsInHeapRegionClosure {
51 protected:
52 G1CollectedHeap* _g1;
53 G1ParScanThreadState* _par_scan_state;
54
55 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
56 ~G1ParClosureSuper() { }
57
58 public:
59 virtual bool apply_to_weak_ref_discovered_field() { return true; }
60 };
61
62 class G1ParPushHeapRSClosure : public G1ParClosureSuper {
63 public:
64 G1ParPushHeapRSClosure(G1CollectedHeap* g1,
65 G1ParScanThreadState* par_scan_state):
66 G1ParClosureSuper(g1, par_scan_state) { }
67
68 template <class T> void do_oop_nv(T* p);
69 virtual void do_oop(oop* p) { do_oop_nv(p); }
70 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
71 };
72
73 class G1ParScanClosure : public G1ParClosureSuper {
74 public:
75 G1ParScanClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
76 G1ParClosureSuper(g1, par_scan_state) { }
77
78 template <class T> void do_oop_nv(T* p);
79 virtual void do_oop(oop* p) { do_oop_nv(p); }
172
173 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
174 G1CollectedHeap* _g1;
175 HeapRegion* _from;
176 G1ParPushHeapRSClosure* _push_ref_cl;
177 bool _record_refs_into_cset;
178 uint _worker_i;
179 bool _has_refs_into_cset;
180
181 public:
182 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
183 G1ParPushHeapRSClosure* push_ref_cl,
184 bool record_refs_into_cset,
185 uint worker_i = 0);
186
187 void set_from(HeapRegion* from) {
188 assert(from != NULL, "from region must be non-NULL");
189 _from = from;
190 }
191
192 bool apply_to_weak_ref_discovered_field() { return true; }
193
194 bool self_forwarded(oop obj) {
195 markOop m = obj->mark();
196 bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
197 return result;
198 }
199
200 bool has_refs_into_cset() const { return _has_refs_into_cset; }
201
202 template <class T> inline void do_oop_nv(T* p);
203 virtual inline void do_oop(narrowOop* p);
204 virtual inline void do_oop(oop* p);
205 };
206
207 #endif // SHARE_VM_GC_G1_G1OOPCLOSURES_HPP
|
39 class ReferenceProcessor;
40
41 // A class that scans oops in a given heap region (much as OopsInGenClosure
42 // scans oops in a generation.)
43 class OopsInHeapRegionClosure: public ExtendedOopClosure {
44 protected:
45 HeapRegion* _from;
46 public:
47 void set_region(HeapRegion* from) { _from = from; }
48 };
49
50 class G1ParClosureSuper : public OopsInHeapRegionClosure {
51 protected:
52 G1CollectedHeap* _g1;
53 G1ParScanThreadState* _par_scan_state;
54
55 G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
56 ~G1ParClosureSuper() { }
57
58 public:
59 // This closure needs special handling for InstanceRefKlass.
60 virtual ReferenceIterationMode reference_iteration_mode() { return DO_DISCOVERED_AND_DISCOVERY; }
61 };
62
63 class G1ParPushHeapRSClosure : public G1ParClosureSuper {
64 public:
65 G1ParPushHeapRSClosure(G1CollectedHeap* g1,
66 G1ParScanThreadState* par_scan_state):
67 G1ParClosureSuper(g1, par_scan_state) { }
68
69 template <class T> void do_oop_nv(T* p);
70 virtual void do_oop(oop* p) { do_oop_nv(p); }
71 virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
72 };
73
74 class G1ParScanClosure : public G1ParClosureSuper {
75 public:
76 G1ParScanClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
77 G1ParClosureSuper(g1, par_scan_state) { }
78
79 template <class T> void do_oop_nv(T* p);
80 virtual void do_oop(oop* p) { do_oop_nv(p); }
173
174 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
175 G1CollectedHeap* _g1;
176 HeapRegion* _from;
177 G1ParPushHeapRSClosure* _push_ref_cl;
178 bool _record_refs_into_cset;
179 uint _worker_i;
180 bool _has_refs_into_cset;
181
182 public:
183 G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
184 G1ParPushHeapRSClosure* push_ref_cl,
185 bool record_refs_into_cset,
186 uint worker_i = 0);
187
188 void set_from(HeapRegion* from) {
189 assert(from != NULL, "from region must be non-NULL");
190 _from = from;
191 }
192
193 bool self_forwarded(oop obj) {
194 markOop m = obj->mark();
195 bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
196 return result;
197 }
198
199 bool has_refs_into_cset() const { return _has_refs_into_cset; }
200
201 template <class T> inline void do_oop_nv(T* p);
202 virtual inline void do_oop(narrowOop* p);
203 virtual inline void do_oop(oop* p);
204
205 // This closure needs special handling for InstanceRefKlass.
206 virtual ReferenceIterationMode reference_iteration_mode() { return DO_DISCOVERED_AND_DISCOVERY; }
207 };
208
209 #endif // SHARE_VM_GC_G1_G1OOPCLOSURES_HPP
|