< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp
Print this page
rev 55401 : 8225582: Shenandoah: Enable concurrent evacuation of JNIHandles
@@ -59,13 +59,20 @@
public:
ShenandoahSerialRoots();
void oops_do(OopClosure* cl, uint worker_id);
};
-class ShenandoahJNIHandleRoots : public ShenandoahSerialRoot {
+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;
@@ -128,11 +135,11 @@
template <typename ITR>
class ShenandoahRootScanner : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
+ ShenandoahJNIHandleRoots<> _jni_roots;
ShenandoahClassLoaderDataRoots _cld_roots;
ShenandoahThreadRoots _thread_roots;
ShenandoahCodeCacheRoots<ITR> _code_roots;
public:
ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
@@ -156,28 +163,29 @@
// Evacuate all roots at a safepoint
class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_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);
+ 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;
+ ShenandoahJNIHandleRoots<> _jni_roots;
ShenandoahClassLoaderDataRoots _cld_roots;
ShenandoahThreadRoots _thread_roots;
ShenandoahWeakRoots _weak_roots;
ShenandoahStringDedupRoots _dedup_roots;
ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
@@ -192,11 +200,11 @@
// Adjuster all roots at a safepoint during full gc
class ShenandoahRootAdjuster : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
- ShenandoahJNIHandleRoots _jni_roots;
+ ShenandoahJNIHandleRoots<> _jni_roots;
ShenandoahClassLoaderDataRoots _cld_roots;
ShenandoahThreadRoots _thread_roots;
ShenandoahWeakRoots _weak_roots;
ShenandoahStringDedupRoots _dedup_roots;
ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
< prev index next >