diff -r ca7d48236048 -r e9be0e04635a src/share/vm/memory/generation.cpp --- a/src/share/vm/memory/generation.cpp Sat Dec 20 00:45:18 2008 -0800 +++ b/src/share/vm/memory/generation.cpp Tue Jan 06 07:05:05 2009 -0800 @@ -319,6 +319,21 @@ space_iterate(&blk); } +class GenerationSafeObjIterateClosure : public SpaceClosure { + private: + ObjectClosure* _cl; + public: + virtual void do_space(Space* s) { + s->safe_object_iterate(_cl); + } + GenerationSafeObjIterateClosure(ObjectClosure* cl) : _cl(cl) {} +}; + +void Generation::safe_object_iterate(ObjectClosure* cl) { + GenerationSafeObjIterateClosure blk(cl); + space_iterate(&blk); +} + void Generation::prepare_for_compaction(CompactPoint* cp) { // Generic implementation, can be specialized CompactibleSpace* space = first_compaction_space();