< prev index next >

src/hotspot/share/gc/z/zRootsIterator.cpp

Print this page

        

*** 27,36 **** --- 27,37 ---- #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" #include "compiler/oopMap.hpp" #include "gc/shared/oopStorageParState.inline.hpp" + #include "gc/z/zGlobals.hpp" #include "gc/z/zNMethodTable.hpp" #include "gc/z/zOopClosures.inline.hpp" #include "gc/z/zRootsIterator.hpp" #include "gc/z/zStat.hpp" #include "memory/universe.hpp"
*** 212,225 **** ZStatTimer timer(ZSubPhasePauseRootsClassLoaderDataGraph); CLDToOopClosure cld_cl(cl); ClassLoaderDataGraph::cld_do(&cld_cl); } void ZRootsIterator::do_threads(OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseRootsThreads); ResourceMark rm; ! Threads::possibly_parallel_oops_do(true, cl, NULL); } void ZRootsIterator::do_code_cache(OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseRootsCodeCache); ZNMethodTable::oops_do(cl); --- 213,247 ---- ZStatTimer timer(ZSubPhasePauseRootsClassLoaderDataGraph); CLDToOopClosure cld_cl(cl); ClassLoaderDataGraph::cld_do(&cld_cl); } + class ZRootsIteratorThreadClosure : public ThreadClosure { + private: + OopClosure* const _cl; + + public: + ZRootsIteratorThreadClosure(OopClosure* cl) : + _cl(cl) {} + + virtual void do_thread(Thread* thread) { + if (thread->is_Java_thread()) { + // Update thread local adddress bad mask + JavaThread* const java_thread = (JavaThread*)thread; + java_thread->set_zaddress_bad_mask(ZAddressBadMask); + } + + // Process thread oops + thread->oops_do(_cl, NULL); + } + }; + void ZRootsIterator::do_threads(OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseRootsThreads); ResourceMark rm; ! ZRootsIteratorThreadClosure thread_cl(cl); ! Threads::possibly_parallel_threads_do(true, &thread_cl); } void ZRootsIterator::do_code_cache(OopClosure* cl) { ZStatTimer timer(ZSubPhasePauseRootsCodeCache); ZNMethodTable::oops_do(cl);
< prev index next >