226 ClassLoaderDataGraph_lock->lock();
227 ClassLoaderDataGraph::clear_claimed_marks();
228 }
229 }
230
231 ZConcurrentRootsIterator::~ZConcurrentRootsIterator() {
232 ZStatTimer timer(ZSubPhaseConcurrentRootsTeardown);
233 if (_marking) {
234 ClassLoaderDataGraph_lock->unlock();
235 }
236 }
237
238 void ZConcurrentRootsIterator::do_jni_handles(ZRootsIteratorClosure* cl) {
239 ZStatTimer timer(ZSubPhaseConcurrentRootsJNIHandles);
240 _jni_handles_iter.oops_do(cl);
241 }
242
243 void ZConcurrentRootsIterator::do_class_loader_data_graph(ZRootsIteratorClosure* cl) {
244 ZStatTimer timer(ZSubPhaseConcurrentRootsClassLoaderDataGraph);
245 CLDToOopClosure cld_cl(cl, _marking ? ClassLoaderData::_claim_strong : ClassLoaderData::_claim_none);
246 ClassLoaderDataGraph::cld_oops_do(&cld_cl);
247 }
248
249 void ZConcurrentRootsIterator::oops_do(ZRootsIteratorClosure* cl) {
250 ZStatTimer timer(ZSubPhaseConcurrentRoots);
251 _jni_handles.oops_do(cl);
252 _class_loader_data_graph.oops_do(cl);
253 }
254
255 ZWeakRootsIterator::ZWeakRootsIterator() :
256 _jvmti_weak_export(this),
257 _jfr_weak(this) {
258 assert(SafepointSynchronize::is_at_safepoint(), "Should be at safepoint");
259 ZStatTimer timer(ZSubPhasePauseWeakRootsSetup);
260 }
261
262 ZWeakRootsIterator::~ZWeakRootsIterator() {
263 ZStatTimer timer(ZSubPhasePauseWeakRootsTeardown);
264 }
265
266 void ZWeakRootsIterator::do_jvmti_weak_export(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl) {
|
226 ClassLoaderDataGraph_lock->lock();
227 ClassLoaderDataGraph::clear_claimed_marks();
228 }
229 }
230
231 ZConcurrentRootsIterator::~ZConcurrentRootsIterator() {
232 ZStatTimer timer(ZSubPhaseConcurrentRootsTeardown);
233 if (_marking) {
234 ClassLoaderDataGraph_lock->unlock();
235 }
236 }
237
238 void ZConcurrentRootsIterator::do_jni_handles(ZRootsIteratorClosure* cl) {
239 ZStatTimer timer(ZSubPhaseConcurrentRootsJNIHandles);
240 _jni_handles_iter.oops_do(cl);
241 }
242
243 void ZConcurrentRootsIterator::do_class_loader_data_graph(ZRootsIteratorClosure* cl) {
244 ZStatTimer timer(ZSubPhaseConcurrentRootsClassLoaderDataGraph);
245 CLDToOopClosure cld_cl(cl, _marking ? ClassLoaderData::_claim_strong : ClassLoaderData::_claim_none);
246 ClassLoaderDataGraph::cld_do(&cld_cl);
247 }
248
249 void ZConcurrentRootsIterator::oops_do(ZRootsIteratorClosure* cl) {
250 ZStatTimer timer(ZSubPhaseConcurrentRoots);
251 _jni_handles.oops_do(cl);
252 _class_loader_data_graph.oops_do(cl);
253 }
254
255 ZWeakRootsIterator::ZWeakRootsIterator() :
256 _jvmti_weak_export(this),
257 _jfr_weak(this) {
258 assert(SafepointSynchronize::is_at_safepoint(), "Should be at safepoint");
259 ZStatTimer timer(ZSubPhasePauseWeakRootsSetup);
260 }
261
262 ZWeakRootsIterator::~ZWeakRootsIterator() {
263 ZStatTimer timer(ZSubPhasePauseWeakRootsTeardown);
264 }
265
266 void ZWeakRootsIterator::do_jvmti_weak_export(BoolObjectClosure* is_alive, ZRootsIteratorClosure* cl) {
|