1.1 --- a/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp Thu Mar 26 08:51:32 2009 -0700 1.2 +++ b/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp Sat Mar 28 15:47:29 2009 -0700 1.3 @@ -55,6 +55,7 @@ 1.4 friend class ParScanThreadStateSet; 1.5 private: 1.6 ObjToScanQueue *_work_queue; 1.7 + GrowableArray<oop>* _overflow_stack; 1.8 1.9 ParGCAllocBuffer _to_space_alloc_buffer; 1.10 1.11 @@ -79,6 +80,9 @@ 1.12 Space* _to_space; 1.13 Space* to_space() { return _to_space; } 1.14 1.15 + ParNewGeneration* _young_gen; 1.16 + ParNewGeneration* young_gen() const { return _young_gen; } 1.17 + 1.18 Generation* _old_gen; 1.19 Generation* old_gen() { return _old_gen; } 1.20 1.21 @@ -134,6 +138,11 @@ 1.22 // Decrease queue size below "max_size". 1.23 void trim_queues(int max_size); 1.24 1.25 + // Private overflow stack usage 1.26 + GrowableArray<oop>* overflow_stack() { return _overflow_stack; } 1.27 + bool take_from_overflow_stack(); 1.28 + void push_on_overflow_stack(oop p); 1.29 + 1.30 // Is new_obj a candidate for scan_partial_array_and_push_remainder method. 1.31 inline bool should_be_partially_scanned(oop new_obj, oop old_obj) const; 1.32 1.33 @@ -378,13 +387,17 @@ 1.34 NOT_PRODUCT(int _overflow_counter;) 1.35 NOT_PRODUCT(bool should_simulate_overflow();) 1.36 1.37 + // Accessor for overflow list 1.38 + oop overflow_list() { return _overflow_list; } 1.39 + 1.40 // Push the given (from-space) object on the global overflow list. 1.41 void push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state); 1.42 1.43 // If the global overflow list is non-empty, move some tasks from it 1.44 - // onto "work_q" (which must be empty). No more than 1/4 of the 1.45 - // max_elems of "work_q" are moved. 1.46 + // onto "work_q" (which need not be empty). No more than 1/4 of the 1.47 + // available space on "work_q" is used. 1.48 bool take_from_overflow_list(ParScanThreadState* par_scan_state); 1.49 + bool take_from_overflow_list_work(ParScanThreadState* par_scan_state); 1.50 1.51 // The task queues to be used by parallel GC threads. 1.52 ObjToScanQueueSet* task_queues() {