< prev index next >

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

Print this page
rev 55336 : 8225550: Shenandoah: Prevent SH::object_iterate() call's side-effects
rev 55338 : 8225590: Shenandoah: Refactor ShenandoahClassLoaderDataRoots API to mirror CLDG API
rev 55339 : 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles and CLDG roots

*** 59,71 **** public: ShenandoahSerialRoots(); void oops_do(OopClosure* cl, uint worker_id); }; ! class ShenandoahJNIHandleRoots : public ShenandoahSerialRoot { public: ShenandoahJNIHandleRoots(); }; class ShenandoahThreadRoots { private: const bool _is_par; --- 59,78 ---- public: ShenandoahSerialRoots(); void oops_do(OopClosure* cl, uint worker_id); }; ! template <bool CONCURRENT = false> ! class ShenandoahJNIHandleRoots { ! private: ! volatile bool _claimed; ! OopStorage::ParState<CONCURRENT, false /* is_const */> _itr; public: ShenandoahJNIHandleRoots(); + + template <typename T> + void oops_do(T* cl, uint worker_id = 0); }; class ShenandoahThreadRoots { private: const bool _is_par;
*** 106,121 **** ~ShenandoahCodeCacheRoots(); void code_blobs_do(CodeBlobClosure* blob_cl, uint worker_id); }; class ShenandoahClassLoaderDataRoots { public: ShenandoahClassLoaderDataRoots(); ! void always_strong_cld_do(CLDClosure* clds, uint worker_id); ! void cld_do(CLDClosure* clds, uint worker_id); }; class ShenandoahRootProcessor : public StackObj { private: ShenandoahHeap* const _heap; --- 113,130 ---- ~ShenandoahCodeCacheRoots(); void code_blobs_do(CodeBlobClosure* blob_cl, uint worker_id); }; + template <bool CONCURRENT = false> class ShenandoahClassLoaderDataRoots { public: ShenandoahClassLoaderDataRoots(); + ~ShenandoahClassLoaderDataRoots(); ! void always_strong_cld_do(CLDClosure* clds, uint worker_id = 0); ! void cld_do(CLDClosure* clds, uint worker_id = 0); }; class ShenandoahRootProcessor : public StackObj { private: ShenandoahHeap* const _heap;
*** 129,140 **** template <typename ITR> class ShenandoahRootScanner : public ShenandoahRootProcessor { private: ShenandoahSerialRoots _serial_roots; ! ShenandoahJNIHandleRoots _jni_roots; ! ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ShenandoahCodeCacheRoots<ITR> _code_roots; public: ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase); --- 138,149 ---- template <typename ITR> class ShenandoahRootScanner : public ShenandoahRootProcessor { private: ShenandoahSerialRoots _serial_roots; ! ShenandoahJNIHandleRoots<> _jni_roots; ! ShenandoahClassLoaderDataRoots<> _cld_roots; ShenandoahThreadRoots _thread_roots; ShenandoahCodeCacheRoots<ITR> _code_roots; public: ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
*** 157,185 **** // Evacuate all roots at a safepoint class ShenandoahRootEvacuator : public ShenandoahRootProcessor { private: ShenandoahSerialRoots _serial_roots; ! ShenandoahJNIHandleRoots _jni_roots; ! ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots; public: ! ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase); void roots_do(uint worker_id, OopClosure* oops); }; // Update all roots at a safepoint class ShenandoahRootUpdater : public ShenandoahRootProcessor { 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; --- 166,195 ---- // Evacuate all roots at a safepoint class ShenandoahRootEvacuator : public ShenandoahRootProcessor { 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: ! ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase, bool include_concurrent_roots); void roots_do(uint worker_id, OopClosure* oops); }; // Update all roots at a safepoint class ShenandoahRootUpdater : public ShenandoahRootProcessor { 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;
*** 193,204 **** // Adjuster all roots at a safepoint during full gc class ShenandoahRootAdjuster : public ShenandoahRootProcessor { private: ShenandoahSerialRoots _serial_roots; ! ShenandoahJNIHandleRoots _jni_roots; ! ShenandoahClassLoaderDataRoots _cld_roots; ShenandoahThreadRoots _thread_roots; ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots; --- 203,214 ---- // Adjuster all roots at a safepoint during full gc class ShenandoahRootAdjuster : public ShenandoahRootProcessor { private: ShenandoahSerialRoots _serial_roots; ! ShenandoahJNIHandleRoots<> _jni_roots; ! ShenandoahClassLoaderDataRoots<> _cld_roots; ShenandoahThreadRoots _thread_roots; ShenandoahWeakRoots _weak_roots; ShenandoahStringDedupRoots _dedup_roots; ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
< prev index next >