4396719: Mark Sweep stack overflow on deeply nested Object arrays

Use an explicit stack for object arrays and process them in chunks.

Reviewed-by: iveresov, apetrusenko
This commit is contained in:
John Coomes 2010-03-03 14:48:26 -08:00
parent 5fdec09798
commit 4f82340476
26 changed files with 419 additions and 182 deletions

View file

@ -91,10 +91,18 @@ class objArrayKlass : public arrayKlass {
// Garbage collection
void oop_follow_contents(oop obj);
inline void oop_follow_contents(oop obj, int index);
template <class T> inline void objarray_follow_contents(oop obj, int index);
int oop_adjust_pointers(oop obj);
// Parallel Scavenge and Parallel Old
PARALLEL_GC_DECLS
#ifndef SERIALGC
inline void oop_follow_contents(ParCompactionManager* cm, oop obj, int index);
template <class T> inline void
objarray_follow_contents(ParCompactionManager* cm, oop obj, int index);
#endif // !SERIALGC
// Iterators
int oop_oop_iterate(oop obj, OopClosure* blk) {
@ -131,5 +139,4 @@ class objArrayKlass : public arrayKlass {
void oop_verify_on(oop obj, outputStream* st);
void oop_verify_old_oop(oop obj, oop* p, bool allow_dirty);
void oop_verify_old_oop(oop obj, narrowOop* p, bool allow_dirty);
};