104 |
106 |
105 void set_scanned_klass(Klass* k) { _scanned_klass = k; } |
107 void set_scanned_klass(Klass* k) { _scanned_klass = k; } |
106 template <class T> void do_klass_barrier(T* p, oop new_obj); |
108 template <class T> void do_klass_barrier(T* p, oop new_obj); |
107 }; |
109 }; |
108 |
110 |
109 template <G1Barrier barrier, bool do_mark_object> |
111 template <G1Barrier barrier, G1Mark do_mark_object> |
110 class G1ParCopyClosure : public G1ParCopyHelper { |
112 class G1ParCopyClosure : public G1ParCopyHelper { |
111 private: |
113 private: |
112 template <class T> void do_oop_work(T* p); |
114 template <class T> void do_oop_work(T* p); |
113 |
115 |
114 public: |
116 public: |
119 } |
121 } |
120 |
122 |
121 template <class T> void do_oop_nv(T* p) { do_oop_work(p); } |
123 template <class T> void do_oop_nv(T* p) { do_oop_work(p); } |
122 virtual void do_oop(oop* p) { do_oop_nv(p); } |
124 virtual void do_oop(oop* p) { do_oop_nv(p); } |
123 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
125 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
124 }; |
126 |
125 |
127 G1CollectedHeap* g1() { return _g1; }; |
126 typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure; |
128 G1ParScanThreadState* pss() { return _par_scan_state; } |
127 typedef G1ParCopyClosure<G1BarrierKlass, false> G1ParScanMetadataClosure; |
129 ReferenceProcessor* rp() { return _ref_processor; }; |
128 |
130 }; |
129 |
131 |
130 typedef G1ParCopyClosure<G1BarrierNone, true> G1ParScanAndMarkExtRootClosure; |
132 typedef G1ParCopyClosure<G1BarrierNone, G1MarkNone> G1ParScanExtRootClosure; |
131 typedef G1ParCopyClosure<G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure; |
133 typedef G1ParCopyClosure<G1BarrierNone, G1MarkFromRoot> G1ParScanAndMarkExtRootClosure; |
132 |
134 typedef G1ParCopyClosure<G1BarrierNone, G1MarkPromotedFromRoot> G1ParScanAndMarkWeakExtRootClosure; |
133 // We use a separate closure to handle references during evacuation |
135 // We use a separate closure to handle references during evacuation |
134 // failure processing. |
136 // failure processing. |
135 |
137 |
136 typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure; |
138 typedef G1ParCopyClosure<G1BarrierEvac, G1MarkNone> G1ParScanHeapEvacFailureClosure; |
137 |
139 |
138 class FilterIntoCSClosure: public ExtendedOopClosure { |
140 class FilterIntoCSClosure: public ExtendedOopClosure { |
139 G1CollectedHeap* _g1; |
141 G1CollectedHeap* _g1; |
140 OopClosure* _oc; |
142 OopClosure* _oc; |
141 DirtyCardToOopClosure* _dcto_cl; |
143 DirtyCardToOopClosure* _dcto_cl; |
162 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
164 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
163 bool apply_to_weak_ref_discovered_field() { return true; } |
165 bool apply_to_weak_ref_discovered_field() { return true; } |
164 }; |
166 }; |
165 |
167 |
166 // Closure for iterating over object fields during concurrent marking |
168 // Closure for iterating over object fields during concurrent marking |
167 class G1CMOopClosure : public ExtendedOopClosure { |
169 class G1CMOopClosure : public MetadataAwareOopClosure { |
|
170 protected: |
|
171 ConcurrentMark* _cm; |
168 private: |
172 private: |
169 G1CollectedHeap* _g1h; |
173 G1CollectedHeap* _g1h; |
170 ConcurrentMark* _cm; |
|
171 CMTask* _task; |
174 CMTask* _task; |
172 public: |
175 public: |
173 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); |
176 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); |
174 template <class T> void do_oop_nv(T* p); |
177 template <class T> void do_oop_nv(T* p); |
175 virtual void do_oop( oop* p) { do_oop_nv(p); } |
178 virtual void do_oop( oop* p) { do_oop_nv(p); } |
176 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
179 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } |
177 }; |
180 }; |
178 |
181 |
179 // Closure to scan the root regions during concurrent marking |
182 // Closure to scan the root regions during concurrent marking |
180 class G1RootRegionScanClosure : public ExtendedOopClosure { |
183 class G1RootRegionScanClosure : public MetadataAwareOopClosure { |
181 private: |
184 private: |
182 G1CollectedHeap* _g1h; |
185 G1CollectedHeap* _g1h; |
183 ConcurrentMark* _cm; |
186 ConcurrentMark* _cm; |
184 uint _worker_id; |
187 uint _worker_id; |
185 public: |
188 public: |