comparison src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp @ 375:81cd571500b0

6725697: par compact - rename class ChunkData to RegionData Reviewed-by: iveresov, tonyp
author jcoomes
date Tue, 30 Sep 2008 12:20:22 -0700
parents d1605aabd0a1
children 8b46c4d82093 148e5441d916
comparison
equal deleted inserted replaced
374:a4b729f5b611 375:81cd571500b0
144 144
145 void RefProcTaskExecutor::execute(ProcessTask& task) 145 void RefProcTaskExecutor::execute(ProcessTask& task)
146 { 146 {
147 ParallelScavengeHeap* heap = PSParallelCompact::gc_heap(); 147 ParallelScavengeHeap* heap = PSParallelCompact::gc_heap();
148 uint parallel_gc_threads = heap->gc_task_manager()->workers(); 148 uint parallel_gc_threads = heap->gc_task_manager()->workers();
149 ChunkTaskQueueSet* qset = ParCompactionManager::chunk_array(); 149 RegionTaskQueueSet* qset = ParCompactionManager::region_array();
150 ParallelTaskTerminator terminator(parallel_gc_threads, qset); 150 ParallelTaskTerminator terminator(parallel_gc_threads, qset);
151 GCTaskQueue* q = GCTaskQueue::create(); 151 GCTaskQueue* q = GCTaskQueue::create();
152 for(uint i=0; i<parallel_gc_threads; i++) { 152 for(uint i=0; i<parallel_gc_threads; i++) {
153 q->enqueue(new RefProcTaskProxy(task, i)); 153 q->enqueue(new RefProcTaskProxy(task, i));
154 } 154 }
203 } 203 }
204 } 204 }
205 } 205 }
206 206
207 // 207 //
208 // StealChunkCompactionTask 208 // StealRegionCompactionTask
209 // 209 //
210 210
211 211
212 StealChunkCompactionTask::StealChunkCompactionTask(ParallelTaskTerminator* t) : 212 StealRegionCompactionTask::StealRegionCompactionTask(ParallelTaskTerminator* t):
213 _terminator(t) {}; 213 _terminator(t) {}
214 214
215 void StealChunkCompactionTask::do_it(GCTaskManager* manager, uint which) { 215 void StealRegionCompactionTask::do_it(GCTaskManager* manager, uint which) {
216 assert(Universe::heap()->is_gc_active(), "called outside gc"); 216 assert(Universe::heap()->is_gc_active(), "called outside gc");
217 217
218 NOT_PRODUCT(TraceTime tm("StealChunkCompactionTask", 218 NOT_PRODUCT(TraceTime tm("StealRegionCompactionTask",
219 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); 219 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
220 220
221 ParCompactionManager* cm = 221 ParCompactionManager* cm =
222 ParCompactionManager::gc_thread_compaction_manager(which); 222 ParCompactionManager::gc_thread_compaction_manager(which);
223 223
224 // Has to drain stacks first because there may be chunks on 224 // Has to drain stacks first because there may be regions on
225 // preloaded onto the stack and this thread may never have 225 // preloaded onto the stack and this thread may never have
226 // done a draining task. Are the draining tasks needed? 226 // done a draining task. Are the draining tasks needed?
227 227
228 cm->drain_chunk_stacks(); 228 cm->drain_region_stacks();
229 229
230 size_t chunk_index = 0; 230 size_t region_index = 0;
231 int random_seed = 17; 231 int random_seed = 17;
232 232
233 // If we're the termination task, try 10 rounds of stealing before 233 // If we're the termination task, try 10 rounds of stealing before
234 // setting the termination flag 234 // setting the termination flag
235 235
236 while(true) { 236 while(true) {
237 if (ParCompactionManager::steal(which, &random_seed, chunk_index)) { 237 if (ParCompactionManager::steal(which, &random_seed, region_index)) {
238 PSParallelCompact::fill_and_update_chunk(cm, chunk_index); 238 PSParallelCompact::fill_and_update_region(cm, region_index);
239 cm->drain_chunk_stacks(); 239 cm->drain_region_stacks();
240 } else { 240 } else {
241 if (terminator()->offer_termination()) { 241 if (terminator()->offer_termination()) {
242 break; 242 break;
243 } 243 }
244 // Go around again. 244 // Go around again.
247 return; 247 return;
248 } 248 }
249 249
250 UpdateDensePrefixTask::UpdateDensePrefixTask( 250 UpdateDensePrefixTask::UpdateDensePrefixTask(
251 PSParallelCompact::SpaceId space_id, 251 PSParallelCompact::SpaceId space_id,
252 size_t chunk_index_start, 252 size_t region_index_start,
253 size_t chunk_index_end) : 253 size_t region_index_end) :
254 _space_id(space_id), _chunk_index_start(chunk_index_start), 254 _space_id(space_id), _region_index_start(region_index_start),
255 _chunk_index_end(chunk_index_end) 255 _region_index_end(region_index_end) {}
256 {}
257 256
258 void UpdateDensePrefixTask::do_it(GCTaskManager* manager, uint which) { 257 void UpdateDensePrefixTask::do_it(GCTaskManager* manager, uint which) {
259 258
260 NOT_PRODUCT(TraceTime tm("UpdateDensePrefixTask", 259 NOT_PRODUCT(TraceTime tm("UpdateDensePrefixTask",
261 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); 260 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
263 ParCompactionManager* cm = 262 ParCompactionManager* cm =
264 ParCompactionManager::gc_thread_compaction_manager(which); 263 ParCompactionManager::gc_thread_compaction_manager(which);
265 264
266 PSParallelCompact::update_and_deadwood_in_dense_prefix(cm, 265 PSParallelCompact::update_and_deadwood_in_dense_prefix(cm,
267 _space_id, 266 _space_id,
268 _chunk_index_start, 267 _region_index_start,
269 _chunk_index_end); 268 _region_index_end);
270 } 269 }
271 270
272 void DrainStacksCompactionTask::do_it(GCTaskManager* manager, uint which) { 271 void DrainStacksCompactionTask::do_it(GCTaskManager* manager, uint which) {
273 assert(Universe::heap()->is_gc_active(), "called outside gc"); 272 assert(Universe::heap()->is_gc_active(), "called outside gc");
274 273
276 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); 275 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
277 276
278 ParCompactionManager* cm = 277 ParCompactionManager* cm =
279 ParCompactionManager::gc_thread_compaction_manager(which); 278 ParCompactionManager::gc_thread_compaction_manager(which);
280 279
281 // Process any chunks already in the compaction managers stacks. 280 // Process any regions already in the compaction managers stacks.
282 cm->drain_chunk_stacks(); 281 cm->drain_region_stacks();
283 } 282 }