< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp

Print this page

153 template <typename T>
154 void ShenandoahSTWRootScanner::roots_do(T* oops, uint worker_id) {
155   MarkingNMethodClosure nmethods_cl(oops);
156   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
157   ResourceMark rm;
158 
159   if (_unload_classes) {
160     _thread_roots.oops_do(oops, &nmethods_cl, worker_id);
161     _cld_roots.always_strong_cld_do(&clds, worker_id);
162   } else {
163     _thread_roots.oops_do(oops, nullptr, worker_id);
164     _code_roots.nmethods_do(&nmethods_cl, worker_id);
165     _cld_roots.cld_do(&clds, worker_id);
166   }
167 
168   _vm_roots.oops_do<T>(oops, worker_id);
169 }
170 
171 template <typename IsAlive, typename KeepAlive>
172 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
173   NMethodToOopClosure update_nmethods(keep_alive, NMethodToOopClosure::FixRelocations);
174   ShenandoahNMethodAndDisarmClosure nmethods_and_disarm_Cl(keep_alive);
175   NMethodToOopClosure* codes_cl = ShenandoahCodeRoots::use_nmethod_barriers_for_mark() ?
176                                   static_cast<NMethodToOopClosure*>(&nmethods_and_disarm_Cl) :
177                                   static_cast<NMethodToOopClosure*>(&update_nmethods);
178 
179   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
180 
181   // Process light-weight/limited parallel roots then
182   _vm_roots.oops_do(keep_alive, worker_id);
183   _weak_roots.weak_oops_do<IsAlive, KeepAlive>(is_alive, keep_alive, worker_id);
184   _cld_roots.cld_do(&clds, worker_id);
185 
186   // Process heavy-weight/fully parallel roots the last
187   _code_roots.nmethods_do(codes_cl, worker_id);
188   _thread_roots.oops_do(keep_alive, nullptr, worker_id);
189 }
190 
191 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP

153 template <typename T>
154 void ShenandoahSTWRootScanner::roots_do(T* oops, uint worker_id) {
155   MarkingNMethodClosure nmethods_cl(oops);
156   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
157   ResourceMark rm;
158 
159   if (_unload_classes) {
160     _thread_roots.oops_do(oops, &nmethods_cl, worker_id);
161     _cld_roots.always_strong_cld_do(&clds, worker_id);
162   } else {
163     _thread_roots.oops_do(oops, nullptr, worker_id);
164     _code_roots.nmethods_do(&nmethods_cl, worker_id);
165     _cld_roots.cld_do(&clds, worker_id);
166   }
167 
168   _vm_roots.oops_do<T>(oops, worker_id);
169 }
170 
171 template <typename IsAlive, typename KeepAlive>
172 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {

173   ShenandoahNMethodAndDisarmClosure nmethods_and_disarm_Cl(keep_alive);
174   NMethodToOopClosure* codes_cl = static_cast<NMethodToOopClosure*>(&nmethods_and_disarm_Cl);


175 
176   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
177 
178   // Process light-weight/limited parallel roots then
179   _vm_roots.oops_do(keep_alive, worker_id);
180   _weak_roots.weak_oops_do<IsAlive, KeepAlive>(is_alive, keep_alive, worker_id);
181   _cld_roots.cld_do(&clds, worker_id);
182 
183   // Process heavy-weight/fully parallel roots the last
184   _code_roots.nmethods_do(codes_cl, worker_id);
185   _thread_roots.oops_do(keep_alive, nullptr, worker_id);
186 }
187 
188 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
< prev index next >