1.1 --- a/src/share/vm/memory/defNewGeneration.hpp Tue Sep 28 09:51:37 2010 -0700 1.2 +++ b/src/share/vm/memory/defNewGeneration.hpp Tue Sep 28 15:56:15 2010 -0700 1.3 @@ -77,10 +77,10 @@ 1.4 // word being overwritten with a self-forwarding-pointer. 1.5 void preserve_mark_if_necessary(oop obj, markOop m); 1.6 1.7 - // When one is non-null, so is the other. Together, they each pair is 1.8 - // an object with a preserved mark, and its mark value. 1.9 - GrowableArray<oop>* _objs_with_preserved_marks; 1.10 - GrowableArray<markOop>* _preserved_marks_of_objs; 1.11 + // Together, these keep <object with a preserved mark, mark value> pairs. 1.12 + // They should always contain the same number of elements. 1.13 + Stack<oop> _objs_with_preserved_marks; 1.14 + Stack<markOop> _preserved_marks_of_objs; 1.15 1.16 // Returns true if the collection can be safely attempted. 1.17 // If this method returns false, a collection is not 1.18 @@ -94,11 +94,7 @@ 1.19 _promo_failure_scan_stack_closure = scan_stack_closure; 1.20 } 1.21 1.22 - GrowableArray<oop>* _promo_failure_scan_stack; 1.23 - GrowableArray<oop>* promo_failure_scan_stack() const { 1.24 - return _promo_failure_scan_stack; 1.25 - } 1.26 - void push_on_promo_failure_scan_stack(oop); 1.27 + Stack<oop> _promo_failure_scan_stack; 1.28 void drain_promo_failure_scan_stack(void); 1.29 bool _promo_failure_drain_in_progress; 1.30 1.31 @@ -184,8 +180,6 @@ 1.32 void do_void(); 1.33 }; 1.34 1.35 - class FastEvacuateFollowersClosure; 1.36 - friend class FastEvacuateFollowersClosure; 1.37 class FastEvacuateFollowersClosure: public VoidClosure { 1.38 GenCollectedHeap* _gch; 1.39 int _level; 1.40 @@ -336,6 +330,10 @@ 1.41 1.42 void verify(bool allow_dirty); 1.43 1.44 + bool promo_failure_scan_is_complete() const { 1.45 + return _promo_failure_scan_stack.is_empty(); 1.46 + } 1.47 + 1.48 protected: 1.49 // If clear_space is true, clear the survivor spaces. Eden is 1.50 // cleared if the minimum size of eden is 0. If mangle_space