152 } |
152 } |
153 // Global (strong) JNI handles |
153 // Global (strong) JNI handles |
154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) |
154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) |
155 JNIHandles::oops_do(roots); |
155 JNIHandles::oops_do(roots); |
156 // All threads execute this; the individual threads are task groups. |
156 // All threads execute this; the individual threads are task groups. |
|
157 CLDToOopClosure roots_from_clds(roots); |
|
158 CLDToOopClosure* roots_from_clds_p = (is_scavenging ? NULL : &roots_from_clds); |
157 if (ParallelGCThreads > 0) { |
159 if (ParallelGCThreads > 0) { |
158 Threads::possibly_parallel_oops_do(roots, code_roots); |
160 Threads::possibly_parallel_oops_do(roots, roots_from_clds_p ,code_roots); |
159 } else { |
161 } else { |
160 Threads::oops_do(roots, code_roots); |
162 Threads::oops_do(roots, roots_from_clds_p, code_roots); |
161 } |
163 } |
162 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) |
164 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) |
163 ObjectSynchronizer::oops_do(roots); |
165 ObjectSynchronizer::oops_do(roots); |
164 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do)) |
166 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do)) |
165 FlatProfiler::oops_do(roots); |
167 FlatProfiler::oops_do(roots); |