< 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,264 ****
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);
// 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);
--- 248,262 ----
class ShenandoahRootScanner : public ShenandoahRootProcessor {
private:
ShenandoahSerialRoots _serial_roots;
ShenandoahThreadRoots _thread_roots;
ShenandoahStringDedupRoots _dedup_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,276 ****
--- 265,291 ----
// 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 >