< prev index next >

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

Print this page

196 template <typename T>
197 void ShenandoahSTWRootScanner::roots_do(T* oops, uint worker_id) {
198   MarkingNMethodClosure nmethods_cl(oops);
199   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
200   ResourceMark rm;
201 
202   if (_unload_classes) {
203     _thread_roots.oops_do(oops, &nmethods_cl, worker_id);
204     _cld_roots.always_strong_cld_do(&clds, worker_id);
205   } else {
206     _thread_roots.oops_do(oops, nullptr, worker_id);
207     _code_roots.nmethods_do(&nmethods_cl, worker_id);
208     _cld_roots.cld_do(&clds, worker_id);
209   }
210 
211   _vm_roots.oops_do<T>(oops, worker_id);
212 }
213 
214 template <typename IsAlive, typename KeepAlive>
215 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
216   NMethodToOopClosure update_nmethods(keep_alive, NMethodToOopClosure::FixRelocations);
217   ShenandoahNMethodAndDisarmClosure nmethods_and_disarm_Cl(keep_alive);
218   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
219 
220   // Process light-weight/limited parallel roots then
221   _vm_roots.oops_do(keep_alive, worker_id);
222   _weak_roots.weak_oops_do<IsAlive, KeepAlive>(is_alive, keep_alive, worker_id);
223   _cld_roots.cld_do(&clds, worker_id);
224 
225   // Process heavy-weight/fully parallel roots the last
226   _code_roots.nmethods_do(&nmethods_and_disarm_Cl, worker_id);
227   _thread_roots.oops_do(keep_alive, nullptr, worker_id);
228 }
229 
230 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP

196 template <typename T>
197 void ShenandoahSTWRootScanner::roots_do(T* oops, uint worker_id) {
198   MarkingNMethodClosure nmethods_cl(oops);
199   CLDToOopClosure clds(oops, ClassLoaderData::_claim_strong);
200   ResourceMark rm;
201 
202   if (_unload_classes) {
203     _thread_roots.oops_do(oops, &nmethods_cl, worker_id);
204     _cld_roots.always_strong_cld_do(&clds, worker_id);
205   } else {
206     _thread_roots.oops_do(oops, nullptr, worker_id);
207     _code_roots.nmethods_do(&nmethods_cl, worker_id);
208     _cld_roots.cld_do(&clds, worker_id);
209   }
210 
211   _vm_roots.oops_do<T>(oops, worker_id);
212 }
213 
214 template <typename IsAlive, typename KeepAlive>
215 void ShenandoahRootUpdater::roots_do(uint worker_id, IsAlive* is_alive, KeepAlive* keep_alive) {
216   NMethodToOopClosure nmethods_cl(keep_alive, NMethodToOopClosure::FixRelocations);

217   CLDToOopClosure clds(keep_alive, ClassLoaderData::_claim_strong);
218 
219   // Process light-weight/limited parallel roots then
220   _vm_roots.oops_do(keep_alive, worker_id);
221   _weak_roots.weak_oops_do<IsAlive, KeepAlive>(is_alive, keep_alive, worker_id);
222   _cld_roots.cld_do(&clds, worker_id);
223 
224   // Process heavy-weight/fully parallel roots the last
225   _code_roots.nmethods_do(&nmethods_cl, worker_id);
226   _thread_roots.oops_do(keep_alive, nullptr, worker_id);
227 }
228 
229 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_INLINE_HPP
< prev index next >