--- old/src/hotspot/share/gc/z/zRootsIterator.cpp 2019-12-09 22:12:12.534575578 +0100 +++ new/src/hotspot/share/gc/z/zRootsIterator.cpp 2019-12-09 22:12:12.330572357 +0100 @@ -139,23 +139,23 @@ } } -class ZRootsIteratorCodeBlobClosure : public CodeBlobToOopClosure { +class ZRootsIteratorCodeBlobClosure : public CodeBlobClosure { private: - BarrierSetNMethod* const _bs; - const bool _disarm_nmethods; + ZRootsIteratorClosure* const _cl; + const bool _should_disarm_nmethods; public: - ZRootsIteratorCodeBlobClosure(OopClosure* cl, bool disarm_nmethods) : - CodeBlobToOopClosure(cl, true /* fix_relocations */), - _bs(BarrierSet::barrier_set()->barrier_set_nmethod()), - _disarm_nmethods(disarm_nmethods) {} + ZRootsIteratorCodeBlobClosure(ZRootsIteratorClosure* cl) : + _cl(cl), + _should_disarm_nmethods(cl->should_disarm_nmethods()) {} virtual void do_code_blob(CodeBlob* cb) { nmethod* const nm = cb->as_nmethod_or_null(); if (nm != NULL && nm->oops_do_try_claim()) { - CodeBlobToOopClosure::do_code_blob(cb); - if (_disarm_nmethods) { - _bs->disarm(nm); + ZNMethod::nmethod_oops_do(nm, _cl); + assert(ZNMethod::is_armed(nm) == _should_disarm_nmethods, "Invalid state"); + if (_should_disarm_nmethods) { + ZNMethod::disarm(nm); } } } @@ -164,23 +164,20 @@ class ZRootsIteratorThreadClosure : public ThreadClosure { private: ZRootsIteratorClosure* const _cl; - const bool _disarm_nmethods; public: - ZRootsIteratorThreadClosure(ZRootsIteratorClosure* cl, bool disarm_nmethods) : - _cl(cl), - _disarm_nmethods(disarm_nmethods) {} + ZRootsIteratorThreadClosure(ZRootsIteratorClosure* cl) : + _cl(cl) {} virtual void do_thread(Thread* thread) { - ZRootsIteratorCodeBlobClosure code_cl(_cl, _disarm_nmethods); + ZRootsIteratorCodeBlobClosure code_cl(_cl); thread->oops_do(_cl, ClassUnloading ? &code_cl : NULL); _cl->do_thread(thread); } }; -ZRootsIterator::ZRootsIterator(bool visit_jvmti_weak_export, bool disarm_nmethods) : +ZRootsIterator::ZRootsIterator(bool visit_jvmti_weak_export) : _visit_jvmti_weak_export(visit_jvmti_weak_export), - _disarm_nmethods(disarm_nmethods), _universe(this), _object_synchronizer(this), _management(this), @@ -248,7 +245,7 @@ void ZRootsIterator::do_threads(ZRootsIteratorClosure* cl) { ZStatTimer timer(ZSubPhasePauseRootsThreads); ResourceMark rm; - ZRootsIteratorThreadClosure thread_cl(cl, _disarm_nmethods); + ZRootsIteratorThreadClosure thread_cl(cl); Threads::possibly_parallel_threads_do(true, &thread_cl); }