< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp

Print this page
rev 55401 : 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles
rev 55402 : 8226311: Shenandoah: Concurrent evacuation of OopStorage backed weak roots

*** 59,68 **** --- 59,160 ---- public: ShenandoahSerialRoots(); void oops_do(OopClosure* cl, uint worker_id); }; + class ShenandoahWeakSerialRoot { + typedef void (*WeakOopsDo)(BoolObjectClosure*, OopClosure*); + private: + volatile bool _claimed; + const WeakOopsDo _weak_oops_do; + const ShenandoahPhaseTimings::GCParPhases _phase; + + public: + ShenandoahWeakSerialRoot(WeakOopsDo oops_do, ShenandoahPhaseTimings::GCParPhases); + void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id); + }; + + #if INCLUDE_JVMTI + class ShenandoahJVMTIWeakRoot : public ShenandoahWeakSerialRoot { + public: + ShenandoahJVMTIWeakRoot(); + }; + #endif // INCLUDE_JVMTI + + #if INCLUDE_JFR + class ShenandoahJFRWeakRoot : public ShenandoahWeakSerialRoot { + public: + ShenandoahJFRWeakRoot(); + }; + #endif // INCLUDE_JFR + + class ShenandoahSerialWeakRoots { + private: + JVMTI_ONLY(ShenandoahJVMTIWeakRoot _jvmti_weak_roots;) + JFR_ONLY(ShenandoahJFRWeakRoot _jfr_weak_roots;) + public: + void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id); + void weak_oops_do(OopClosure* cl, uint worker_id); + }; + + template <bool CONCURRENT = false> + class ShenandoahWeakRoot { + private: + OopStorage::ParState<CONCURRENT, false /* is_const */> _itr; + const ShenandoahPhaseTimings::GCParPhases _phase; + public: + ShenandoahWeakRoot(OopStorage* storage, ShenandoahPhaseTimings::GCParPhases phase); + + template <typename Closure> + void oops_do(Closure* cl, uint worker_id); + }; + + template <> + class ShenandoahWeakRoot<false> { + private: + OopStorage::ParState<false /* concurrent */, false /* is_const */> _itr; + const ShenandoahPhaseTimings::GCParPhases _phase; + + public: + ShenandoahWeakRoot(OopStorage* storage, ShenandoahPhaseTimings::GCParPhases phase); + + template <typename IsAliveClosure, typename KeepAliveClosure> + void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id); + }; + + template <bool CONCURRENT = false> + class ShenandoahWeakRoots { + private: + ShenandoahWeakRoot<CONCURRENT> _jni_roots; + ShenandoahWeakRoot<CONCURRENT> _string_table_roots; + ShenandoahWeakRoot<CONCURRENT> _resolved_method_table_roots; + ShenandoahWeakRoot<CONCURRENT> _vm_roots; + + public: + ShenandoahWeakRoots(); + + template <typename Closure> + void oops_do(Closure* cl, uint worker_id = 0); + }; + + template <> + class ShenandoahWeakRoots<false /* concurrent */> { + private: + ShenandoahWeakRoot<> _jni_roots; + ShenandoahWeakRoot<> _string_table_roots; + ShenandoahWeakRoot<> _resolved_method_table_roots; + ShenandoahWeakRoot<> _vm_roots; + public: + ShenandoahWeakRoots(); + + template <typename Closure> + void oops_do(Closure* cl, uint worker_id = 0); + + template <typename IsAliveClosure, typename KeepAliveClosure> + void weak_oops_do(IsAliveClosure* is_alive, KeepAliveClosure* keep_alive, uint worker_id); + }; + template <bool CONCURRENT = false> class ShenandoahJNIHandleRoots { private: volatile bool _claimed; OopStorage::ParState<CONCURRENT, false /* is_const */> _itr;
*** 82,103 **** void oops_do(OopClosure* oops_cl, CodeBlobClosure* code_cl, uint worker_id); void threads_do(ThreadClosure* tc, uint worker_id); }; - class ShenandoahWeakRoots { - private: - WeakProcessorPhaseTimes _process_timings; - WeakProcessor::Task _task; - public: - ShenandoahWeakRoots(uint n_workers); - ~ShenandoahWeakRoots(); - - template <typename IsAlive, typename KeepAlive> - void oops_do(IsAlive* is_alive, KeepAlive* keep_alive, uint worker_id); - }; - class ShenandoahStringDedupRoots { public: ShenandoahStringDedupRoots(); ~ShenandoahStringDedupRoots(); --- 174,183 ----
*** 166,176 **** private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; bool _include_concurrent_roots; public: --- 246,257 ---- private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahSerialWeakRoots _serial_weak_roots; ! ShenandoahWeakRoots<> _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; bool _include_concurrent_roots; public:
*** 184,194 **** private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; const bool _update_code_cache; public: --- 265,276 ---- private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahSerialWeakRoots _serial_weak_roots; ! ShenandoahWeakRoots<> _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; const bool _update_code_cache; public:
*** 203,213 **** private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots; public: ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase); --- 285,296 ---- private: ShenandoahSerialRoots _serial_roots; ShenandoahJNIHandleRoots<> _jni_roots; ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ! ShenandoahSerialWeakRoots _serial_weak_roots; ! ShenandoahWeakRoots<> _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots; public: ShenandoahRootAdjuster(uint n_workers, ShenandoahPhaseTimings::Phase phase);
< prev index next >