< 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 >