161 } else {
162 Threads::oops_do(roots, roots_from_clds_p, code_roots);
163 }
164 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do))
165 ObjectSynchronizer::oops_do(roots);
166 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do))
167 FlatProfiler::oops_do(roots);
168 if (!_process_strong_tasks->is_task_claimed(SH_PS_Management_oops_do))
169 Management::oops_do(roots);
170 if (!_process_strong_tasks->is_task_claimed(SH_PS_jvmti_oops_do))
171 JvmtiExport::oops_do(roots);
172
173 if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) {
174 if (so & SO_AllClasses) {
175 SystemDictionary::oops_do(roots);
176 ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging);
177 } else if (so & SO_SystemClasses) {
178 SystemDictionary::always_strong_oops_do(roots);
179 ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging);
180 } else {
181 ShouldNotReachHere2("We should always have selected either SO_AllClasses or SO_SystemClasses");
182 }
183 }
184
185 if (!_process_strong_tasks->is_task_claimed(SH_PS_StringTable_oops_do)) {
186 if (so & SO_Strings) {
187 StringTable::oops_do(roots);
188 }
189 }
190
191 if (!_process_strong_tasks->is_task_claimed(SH_PS_CodeCache_oops_do)) {
192 if (so & SO_CodeCache) {
193 assert(code_roots != NULL, "must supply closure for code cache");
194
195 if (is_scavenging) {
196 // We only visit parts of the CodeCache when scavenging.
197 CodeCache::scavenge_root_nmethods_do(code_roots);
198 } else {
199 // CMSCollector uses this to do intermediate-strength collections.
200 // We scan the entire code cache, since CodeCache::do_unloading is not called.
201 CodeCache::blobs_do(code_roots);
|
161 } else {
162 Threads::oops_do(roots, roots_from_clds_p, code_roots);
163 }
164 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do))
165 ObjectSynchronizer::oops_do(roots);
166 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do))
167 FlatProfiler::oops_do(roots);
168 if (!_process_strong_tasks->is_task_claimed(SH_PS_Management_oops_do))
169 Management::oops_do(roots);
170 if (!_process_strong_tasks->is_task_claimed(SH_PS_jvmti_oops_do))
171 JvmtiExport::oops_do(roots);
172
173 if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) {
174 if (so & SO_AllClasses) {
175 SystemDictionary::oops_do(roots);
176 ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging);
177 } else if (so & SO_SystemClasses) {
178 SystemDictionary::always_strong_oops_do(roots);
179 ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging);
180 } else {
181 fatal("We should always have selected either SO_AllClasses or SO_SystemClasses");
182 }
183 }
184
185 if (!_process_strong_tasks->is_task_claimed(SH_PS_StringTable_oops_do)) {
186 if (so & SO_Strings) {
187 StringTable::oops_do(roots);
188 }
189 }
190
191 if (!_process_strong_tasks->is_task_claimed(SH_PS_CodeCache_oops_do)) {
192 if (so & SO_CodeCache) {
193 assert(code_roots != NULL, "must supply closure for code cache");
194
195 if (is_scavenging) {
196 // We only visit parts of the CodeCache when scavenging.
197 CodeCache::scavenge_root_nmethods_do(code_roots);
198 } else {
199 // CMSCollector uses this to do intermediate-strength collections.
200 // We scan the entire code cache, since CodeCache::do_unloading is not called.
201 CodeCache::blobs_do(code_roots);
|