195 class ObjectToOopClosure: public ObjectClosure { |
195 class ObjectToOopClosure: public ObjectClosure { |
196 OopIterateClosure* _cl; |
196 OopIterateClosure* _cl; |
197 public: |
197 public: |
198 void do_object(oop obj); |
198 void do_object(oop obj); |
199 ObjectToOopClosure(OopIterateClosure* cl) : _cl(cl) {} |
199 ObjectToOopClosure(OopIterateClosure* cl) : _cl(cl) {} |
200 }; |
|
201 |
|
202 // A version of ObjectClosure that is expected to be robust |
|
203 // in the face of possibly uninitialized objects. |
|
204 class ObjectClosureCareful : public ObjectClosure { |
|
205 public: |
|
206 virtual size_t do_object_careful_m(oop p, MemRegion mr) = 0; |
|
207 virtual size_t do_object_careful(oop p) = 0; |
|
208 }; |
|
209 |
|
210 // The following are used in CompactibleFreeListSpace and |
|
211 // ConcurrentMarkSweepGeneration. |
|
212 |
|
213 // Blk closure (abstract class) |
|
214 class BlkClosure : public StackObj { |
|
215 public: |
|
216 virtual size_t do_blk(HeapWord* addr) = 0; |
|
217 }; |
|
218 |
|
219 // A version of BlkClosure that is expected to be robust |
|
220 // in the face of possibly uninitialized objects. |
|
221 class BlkClosureCareful : public BlkClosure { |
|
222 public: |
|
223 size_t do_blk(HeapWord* addr) { |
|
224 guarantee(false, "call do_blk_careful instead"); |
|
225 return 0; |
|
226 } |
|
227 virtual size_t do_blk_careful(HeapWord* addr) = 0; |
|
228 }; |
200 }; |
229 |
201 |
230 // SpaceClosure is used for iterating over spaces |
202 // SpaceClosure is used for iterating over spaces |
231 |
203 |
232 class Space; |
204 class Space; |