comparison src/share/vm/gc_implementation/g1/ptrQueue.hpp @ 616:4f360ec815ba

6720309: G1: don't synchronously update RSet during evacuation pauses 6720334: G1: don't update RSets of collection set regions during an evacuation pause Summary: Introduced a deferred update mechanism for delaying the rset updates during the collection pause Reviewed-by: apetrusenko, tonyp
author iveresov
date Fri, 06 Mar 2009 13:50:14 -0800
parents fe3d7c11b4b7
children 7bb995fbd3c0
comparison
equal deleted inserted replaced
615:c6c601a0f2d6 616:4f360ec815ba
153 // This (and the interpretation of the first element as a "next" 153 // This (and the interpretation of the first element as a "next"
154 // pointer) are protected by the TLOQ_FL_lock. 154 // pointer) are protected by the TLOQ_FL_lock.
155 Mutex* _fl_lock; 155 Mutex* _fl_lock;
156 void** _buf_free_list; 156 void** _buf_free_list;
157 size_t _buf_free_list_sz; 157 size_t _buf_free_list_sz;
158 // Queue set can share a freelist. The _fl_owner variable
159 // specifies the owner. It is set to "this" by default.
160 PtrQueueSet* _fl_owner;
158 161
159 // The size of all buffers in the set. 162 // The size of all buffers in the set.
160 size_t _sz; 163 size_t _sz;
161 164
162 bool _all_active; 165 bool _all_active;
186 PtrQueueSet(bool notify_when_complete = false); 189 PtrQueueSet(bool notify_when_complete = false);
187 190
188 // Because of init-order concerns, we can't pass these as constructor 191 // Because of init-order concerns, we can't pass these as constructor
189 // arguments. 192 // arguments.
190 void initialize(Monitor* cbl_mon, Mutex* fl_lock, 193 void initialize(Monitor* cbl_mon, Mutex* fl_lock,
191 int max_completed_queue = 0) { 194 int max_completed_queue = 0,
195 PtrQueueSet *fl_owner = NULL) {
192 _max_completed_queue = max_completed_queue; 196 _max_completed_queue = max_completed_queue;
193 assert(cbl_mon != NULL && fl_lock != NULL, "Init order issue?"); 197 assert(cbl_mon != NULL && fl_lock != NULL, "Init order issue?");
194 _cbl_mon = cbl_mon; _fl_lock = fl_lock; 198 _cbl_mon = cbl_mon;
199 _fl_lock = fl_lock;
200 _fl_owner = (fl_owner != NULL) ? fl_owner : this;
195 } 201 }
196 202
197 // Return an empty oop array of size _sz (required to be non-zero). 203 // Return an empty oop array of size _sz (required to be non-zero).
198 void** allocate_buffer(); 204 void** allocate_buffer();
199 205
226 // Must only be called at a safe point. Indicates that the buffer free 232 // Must only be called at a safe point. Indicates that the buffer free
227 // list size may be reduced, if that is deemed desirable. 233 // list size may be reduced, if that is deemed desirable.
228 void reduce_free_list(); 234 void reduce_free_list();
229 235
230 size_t completed_buffers_num() { return _n_completed_buffers; } 236 size_t completed_buffers_num() { return _n_completed_buffers; }
237
238 void merge_bufferlists(PtrQueueSet* src);
239 void merge_freelists(PtrQueueSet* src);
231 }; 240 };