202 if (!_process_strong_tasks->is_task_claimed(G1RP_PS_filter_satb_buffers) && _g1h->mark_in_progress()) { |
202 if (!_process_strong_tasks->is_task_claimed(G1RP_PS_filter_satb_buffers) && _g1h->mark_in_progress()) { |
203 JavaThread::satb_mark_queue_set().filter_thread_buffers(); |
203 JavaThread::satb_mark_queue_set().filter_thread_buffers(); |
204 } |
204 } |
205 } |
205 } |
206 |
206 |
207 _process_strong_tasks->all_tasks_completed(); |
207 _process_strong_tasks->all_tasks_completed(n_workers()); |
208 } |
208 } |
209 |
209 |
210 void G1RootProcessor::process_strong_roots(OopClosure* oops, |
210 void G1RootProcessor::process_strong_roots(OopClosure* oops, |
211 CLDClosure* clds, |
211 CLDClosure* clds, |
212 CodeBlobClosure* blobs) { |
212 CodeBlobClosure* blobs) { |
213 |
213 |
214 process_java_roots(oops, clds, clds, NULL, blobs, NULL, 0); |
214 process_java_roots(oops, clds, clds, NULL, blobs, NULL, 0); |
215 process_vm_roots(oops, NULL, NULL, 0); |
215 process_vm_roots(oops, NULL, NULL, 0); |
216 |
216 |
217 _process_strong_tasks->all_tasks_completed(); |
217 _process_strong_tasks->all_tasks_completed(n_workers()); |
218 } |
218 } |
219 |
219 |
220 void G1RootProcessor::process_all_roots(OopClosure* oops, |
220 void G1RootProcessor::process_all_roots(OopClosure* oops, |
221 CLDClosure* clds, |
221 CLDClosure* clds, |
222 CodeBlobClosure* blobs) { |
222 CodeBlobClosure* blobs) { |
226 |
226 |
227 if (!_process_strong_tasks->is_task_claimed(G1RP_PS_CodeCache_oops_do)) { |
227 if (!_process_strong_tasks->is_task_claimed(G1RP_PS_CodeCache_oops_do)) { |
228 CodeCache::blobs_do(blobs); |
228 CodeCache::blobs_do(blobs); |
229 } |
229 } |
230 |
230 |
231 _process_strong_tasks->all_tasks_completed(); |
231 _process_strong_tasks->all_tasks_completed(n_workers()); |
232 } |
232 } |
233 |
233 |
234 void G1RootProcessor::process_java_roots(OopClosure* strong_roots, |
234 void G1RootProcessor::process_java_roots(OopClosure* strong_roots, |
235 CLDClosure* thread_stack_clds, |
235 CLDClosure* thread_stack_clds, |
236 CLDClosure* strong_clds, |
236 CLDClosure* strong_clds, |
325 G1CodeBlobClosure scavenge_cs_nmethods(scan_non_heap_weak_roots); |
325 G1CodeBlobClosure scavenge_cs_nmethods(scan_non_heap_weak_roots); |
326 |
326 |
327 _g1h->g1_rem_set()->oops_into_collection_set_do(scan_rs, &scavenge_cs_nmethods, worker_i); |
327 _g1h->g1_rem_set()->oops_into_collection_set_do(scan_rs, &scavenge_cs_nmethods, worker_i); |
328 } |
328 } |
329 |
329 |
330 void G1RootProcessor::set_num_workers(uint active_workers) { |
|
331 assert(active_workers == _srs.n_threads(), |
|
332 err_msg("Mismatch between number of worker threads. active_workers: %u and n_workers(): %u", |
|
333 active_workers, |
|
334 _srs.n_threads())); |
|
335 _process_strong_tasks->set_n_threads(active_workers); |
|
336 } |
|
337 |
|
338 uint G1RootProcessor::n_workers() const { |
330 uint G1RootProcessor::n_workers() const { |
339 return _srs.n_threads(); |
331 return _srs.n_threads(); |
340 } |
332 } |