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