218 int out_of_region() { return _out_of_region; } |
218 int out_of_region() { return _out_of_region; } |
219 }; |
219 }; |
220 |
220 |
221 // Closure for iterating over object fields during concurrent marking |
221 // Closure for iterating over object fields during concurrent marking |
222 class G1CMOopClosure : public OopClosure { |
222 class G1CMOopClosure : public OopClosure { |
|
223 private: |
223 G1CollectedHeap* _g1h; |
224 G1CollectedHeap* _g1h; |
224 ConcurrentMark* _cm; |
225 ConcurrentMark* _cm; |
225 CMTask* _task; |
226 CMTask* _task; |
226 public: |
227 public: |
227 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); |
228 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); |
228 template <class T> void do_oop_nv(T* p); |
229 template <class T> void do_oop_nv(T* p); |
229 virtual void do_oop( oop* p) { do_oop_nv(p); } |
230 virtual void do_oop( oop* p) { do_oop_nv(p); } |
230 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
231 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
231 }; |
232 }; |
232 |
233 |
|
234 // Closure to scan the root regions during concurrent marking |
|
235 class G1RootRegionScanClosure : public OopClosure { |
|
236 private: |
|
237 G1CollectedHeap* _g1h; |
|
238 ConcurrentMark* _cm; |
|
239 uint _worker_id; |
|
240 public: |
|
241 G1RootRegionScanClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, |
|
242 uint worker_id) : |
|
243 _g1h(g1h), _cm(cm), _worker_id(worker_id) { } |
|
244 template <class T> void do_oop_nv(T* p); |
|
245 virtual void do_oop( oop* p) { do_oop_nv(p); } |
|
246 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
|
247 }; |
|
248 |
233 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP |
249 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP |