< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp
Print this page
rev 59534 : 8245961: Shenandoah: move some root marking to concurrent phase
@@ -248,17 +248,15 @@
class ShenandoahRootScanner : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
ShenandoahThreadRoots _thread_roots;
- ShenandoahCodeCacheRoots _code_roots;
- ShenandoahVMRoots<false /*concurrent*/ > _vm_roots;
ShenandoahStringDedupRoots _dedup_roots;
- ShenandoahClassLoaderDataRoots<false /*concurrent*/, false /*single threaded*/>
- _cld_roots;
+
public:
ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
+ ~ShenandoahRootScanner();
// Apply oops, clds and blobs to all strongly reachable roots in the system,
// during class unloading cycle
void strong_roots_do(uint worker_id, OopClosure* cl);
void strong_roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc = NULL);
@@ -267,10 +265,27 @@
// roots when class unloading is disabled during this cycle
void roots_do(uint worker_id, OopClosure* cl);
void roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure* tc = NULL);
};
+template <bool CONCURRENT, bool SINGLE_THREADED>
+class ShenandoahConcurrentRootScanner {
+private:
+ ShenandoahVMRoots<CONCURRENT> _vm_roots;
+ ShenandoahClassLoaderDataRoots<CONCURRENT, SINGLE_THREADED>
+ _cld_roots;
+ ShenandoahNMethodTableSnapshot* _codecache_snapshot;
+ ShenandoahPhaseTimings::Phase _phase;
+
+public:
+ ShenandoahConcurrentRootScanner(ShenandoahPhaseTimings::Phase phase);
+ ~ShenandoahConcurrentRootScanner();
+
+ void oops_do(OopClosure* oops, uint worker_id);
+};
+
+
// This scanner is only for SH::object_iteration() and only supports single-threaded
// root scanning
class ShenandoahHeapIterationRootScanner : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
< prev index next >