src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.hpp
changeset 55335 f7cc25dda38a
parent 55121 f19a728d576d
child 55395 9c6d907cefac
equal deleted inserted replaced
55334:ff74a3c584e5 55335:f7cc25dda38a
    54   ShenandoahSerialRoot  _universe_root;
    54   ShenandoahSerialRoot  _universe_root;
    55   ShenandoahSerialRoot  _object_synchronizer_root;
    55   ShenandoahSerialRoot  _object_synchronizer_root;
    56   ShenandoahSerialRoot  _management_root;
    56   ShenandoahSerialRoot  _management_root;
    57   ShenandoahSerialRoot  _system_dictionary_root;
    57   ShenandoahSerialRoot  _system_dictionary_root;
    58   ShenandoahSerialRoot  _jvmti_root;
    58   ShenandoahSerialRoot  _jvmti_root;
    59   ShenandoahSerialRoot  _jni_handle_root;
       
    60 public:
    59 public:
    61   ShenandoahSerialRoots();
    60   ShenandoahSerialRoots();
    62   void oops_do(OopClosure* cl, uint worker_id);
    61   void oops_do(OopClosure* cl, uint worker_id);
    63 };
    62 };
    64 
    63 
       
    64 class ShenandoahJNIHandleRoots : public ShenandoahSerialRoot {
       
    65 public:
       
    66   ShenandoahJNIHandleRoots();
       
    67 };
       
    68 
    65 class ShenandoahThreadRoots {
    69 class ShenandoahThreadRoots {
    66 private:
    70 private:
    67   const bool _is_par;
    71   const bool _is_par;
    68 public:
    72 public:
    69   ShenandoahThreadRoots(bool is_par);
    73   ShenandoahThreadRoots(bool is_par);
   124 
   128 
   125 template <typename ITR>
   129 template <typename ITR>
   126 class ShenandoahRootScanner : public ShenandoahRootProcessor {
   130 class ShenandoahRootScanner : public ShenandoahRootProcessor {
   127 private:
   131 private:
   128   ShenandoahSerialRoots          _serial_roots;
   132   ShenandoahSerialRoots          _serial_roots;
       
   133   ShenandoahJNIHandleRoots       _jni_roots;
   129   ShenandoahClassLoaderDataRoots _cld_roots;
   134   ShenandoahClassLoaderDataRoots _cld_roots;
   130   ShenandoahThreadRoots          _thread_roots;
   135   ShenandoahThreadRoots          _thread_roots;
   131   ShenandoahCodeCacheRoots<ITR>  _code_roots;
   136   ShenandoahCodeCacheRoots<ITR>  _code_roots;
   132 public:
   137 public:
   133   ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
   138   ShenandoahRootScanner(uint n_workers, ShenandoahPhaseTimings::Phase phase);
   150 
   155 
   151 // Evacuate all roots at a safepoint
   156 // Evacuate all roots at a safepoint
   152 class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
   157 class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
   153 private:
   158 private:
   154   ShenandoahSerialRoots          _serial_roots;
   159   ShenandoahSerialRoots          _serial_roots;
       
   160   ShenandoahJNIHandleRoots       _jni_roots;
   155   ShenandoahClassLoaderDataRoots _cld_roots;
   161   ShenandoahClassLoaderDataRoots _cld_roots;
   156   ShenandoahThreadRoots          _thread_roots;
   162   ShenandoahThreadRoots          _thread_roots;
   157   ShenandoahWeakRoots            _weak_roots;
   163   ShenandoahWeakRoots            _weak_roots;
   158   ShenandoahStringDedupRoots     _dedup_roots;
   164   ShenandoahStringDedupRoots     _dedup_roots;
   159   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
   165   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
   166 
   172 
   167 // Update all roots at a safepoint
   173 // Update all roots at a safepoint
   168 class ShenandoahRootUpdater : public ShenandoahRootProcessor {
   174 class ShenandoahRootUpdater : public ShenandoahRootProcessor {
   169 private:
   175 private:
   170   ShenandoahSerialRoots          _serial_roots;
   176   ShenandoahSerialRoots          _serial_roots;
       
   177   ShenandoahJNIHandleRoots       _jni_roots;
   171   ShenandoahClassLoaderDataRoots _cld_roots;
   178   ShenandoahClassLoaderDataRoots _cld_roots;
   172   ShenandoahThreadRoots          _thread_roots;
   179   ShenandoahThreadRoots          _thread_roots;
   173   ShenandoahWeakRoots            _weak_roots;
   180   ShenandoahWeakRoots            _weak_roots;
   174   ShenandoahStringDedupRoots     _dedup_roots;
   181   ShenandoahStringDedupRoots     _dedup_roots;
   175   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
   182   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
   184 
   191 
   185 // Adjuster all roots at a safepoint during full gc
   192 // Adjuster all roots at a safepoint during full gc
   186 class ShenandoahRootAdjuster : public ShenandoahRootProcessor {
   193 class ShenandoahRootAdjuster : public ShenandoahRootProcessor {
   187 private:
   194 private:
   188   ShenandoahSerialRoots          _serial_roots;
   195   ShenandoahSerialRoots          _serial_roots;
       
   196   ShenandoahJNIHandleRoots       _jni_roots;
   189   ShenandoahClassLoaderDataRoots _cld_roots;
   197   ShenandoahClassLoaderDataRoots _cld_roots;
   190   ShenandoahThreadRoots          _thread_roots;
   198   ShenandoahThreadRoots          _thread_roots;
   191   ShenandoahWeakRoots            _weak_roots;
   199   ShenandoahWeakRoots            _weak_roots;
   192   ShenandoahStringDedupRoots     _dedup_roots;
   200   ShenandoahStringDedupRoots     _dedup_roots;
   193   ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
   201   ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;