236 public: 237 const HeapWord* _p; 238 bool is_obj; 239 virtual void do_space(Space* s) { 240 if (!is_obj && s->is_in_reserved(_p)) { 241 is_obj |= s->block_is_obj(_p); 242 } 243 } 244 GenerationBlockIsObjClosure(const HeapWord* p) { _p = p; is_obj = false; } 245 }; 246 247 bool Generation::block_is_obj(const HeapWord* p) const { 248 GenerationBlockIsObjClosure blk(p); 249 // Cast away const 250 ((Generation*)this)->space_iterate(&blk); 251 return blk.is_obj; 252 } 253 254 class GenerationOopIterateClosure : public SpaceClosure { 255 public: 256 ExtendedOopClosure* _cl; 257 virtual void do_space(Space* s) { 258 s->oop_iterate(_cl); 259 } 260 GenerationOopIterateClosure(ExtendedOopClosure* cl) : 261 _cl(cl) {} 262 }; 263 264 void Generation::oop_iterate(ExtendedOopClosure* cl) { 265 GenerationOopIterateClosure blk(cl); 266 space_iterate(&blk); 267 } 268 269 void Generation::younger_refs_in_space_iterate(Space* sp, 270 OopsInGenClosure* cl, 271 uint n_threads) { 272 CardTableRS* rs = GenCollectedHeap::heap()->rem_set(); 273 rs->younger_refs_in_space_iterate(sp, cl, n_threads); 274 } 275 276 class GenerationObjIterateClosure : public SpaceClosure { 277 private: 278 ObjectClosure* _cl; 279 public: 280 virtual void do_space(Space* s) { 281 s->object_iterate(_cl); 282 } 283 GenerationObjIterateClosure(ObjectClosure* cl) : _cl(cl) {} 284 }; | 236 public: 237 const HeapWord* _p; 238 bool is_obj; 239 virtual void do_space(Space* s) { 240 if (!is_obj && s->is_in_reserved(_p)) { 241 is_obj |= s->block_is_obj(_p); 242 } 243 } 244 GenerationBlockIsObjClosure(const HeapWord* p) { _p = p; is_obj = false; } 245 }; 246 247 bool Generation::block_is_obj(const HeapWord* p) const { 248 GenerationBlockIsObjClosure blk(p); 249 // Cast away const 250 ((Generation*)this)->space_iterate(&blk); 251 return blk.is_obj; 252 } 253 254 class GenerationOopIterateClosure : public SpaceClosure { 255 public: 256 OopIterateClosure* _cl; 257 virtual void do_space(Space* s) { 258 s->oop_iterate(_cl); 259 } 260 GenerationOopIterateClosure(OopIterateClosure* cl) : 261 _cl(cl) {} 262 }; 263 264 void Generation::oop_iterate(OopIterateClosure* cl) { 265 GenerationOopIterateClosure blk(cl); 266 space_iterate(&blk); 267 } 268 269 void Generation::younger_refs_in_space_iterate(Space* sp, 270 OopsInGenClosure* cl, 271 uint n_threads) { 272 CardTableRS* rs = GenCollectedHeap::heap()->rem_set(); 273 rs->younger_refs_in_space_iterate(sp, cl, n_threads); 274 } 275 276 class GenerationObjIterateClosure : public SpaceClosure { 277 private: 278 ObjectClosure* _cl; 279 public: 280 virtual void do_space(Space* s) { 281 s->object_iterate(_cl); 282 } 283 GenerationObjIterateClosure(ObjectClosure* cl) : _cl(cl) {} 284 }; |