< prev index next >

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

Print this page

192   oop obj = RawAccess<>::oop_load(p);
193   if (!CompressedOops::is_null(obj)) {
194     if (_is_alive->do_object_b(obj)) {
195       _keep_alive->do_oop(p);
196     } else {
197       if (CONCURRENT) {
198         ShenandoahHeap::atomic_clear_oop(p, obj);
199       } else {
200         RawAccess<IS_NOT_NULL>::oop_store(p, oop());
201       }
202     }
203   }
204 }
205 
206 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
207 void ShenandoahCleanUpdateWeakOopsClosure<CONCURRENT, IsAlive, KeepAlive>::do_oop(narrowOop* p) {
208   ShouldNotReachHere();
209 }
210 
211 ShenandoahNMethodAndDisarmClosure::ShenandoahNMethodAndDisarmClosure(OopClosure* cl) :
212   NMethodToOopClosure(cl, true /* fix_relocations */),
213    _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {
214 }
215 
216 void ShenandoahNMethodAndDisarmClosure::do_nmethod(nmethod* nm) {
217   assert(nm != nullptr, "Sanity");
218   assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here");
219   NMethodToOopClosure::do_nmethod(nm);
220   _bs->disarm(nm);
221 }
222 
223 
224 //
225 // ========= Update References
226 //
227 
228 template <ShenandoahGenerationType GENERATION>
229 ShenandoahMarkUpdateRefsClosure<GENERATION>::ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q,
230                                                                              ShenandoahReferenceProcessor* rp,
231                                                                              ShenandoahObjToScanQueue* old_q) :
232   ShenandoahMarkRefsSuperClosure(q, rp, old_q) {
233   assert(_heap->is_stw_gc_in_progress(), "Can only be used for STW GC");
234 }
235 
236 template<ShenandoahGenerationType GENERATION>
237 template<class T>
238 inline void ShenandoahMarkUpdateRefsClosure<GENERATION>::work(T* p) {
239   // Update the location
240   _heap->non_conc_update_with_forwarded(p);

192   oop obj = RawAccess<>::oop_load(p);
193   if (!CompressedOops::is_null(obj)) {
194     if (_is_alive->do_object_b(obj)) {
195       _keep_alive->do_oop(p);
196     } else {
197       if (CONCURRENT) {
198         ShenandoahHeap::atomic_clear_oop(p, obj);
199       } else {
200         RawAccess<IS_NOT_NULL>::oop_store(p, oop());
201       }
202     }
203   }
204 }
205 
206 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
207 void ShenandoahCleanUpdateWeakOopsClosure<CONCURRENT, IsAlive, KeepAlive>::do_oop(narrowOop* p) {
208   ShouldNotReachHere();
209 }
210 
211 ShenandoahNMethodAndDisarmClosure::ShenandoahNMethodAndDisarmClosure(OopClosure* cl) :
212   NMethodToOopClosure(cl, true /* fix_relocations */) {}


213 
214 void ShenandoahNMethodAndDisarmClosure::do_nmethod(nmethod* nm) {
215   assert(nm != nullptr, "Sanity");
216   assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here");
217   NMethodToOopClosure::do_nmethod(nm);
218   ShenandoahNMethod::disarm_nmethod(nm);
219 }
220 
221 
222 //
223 // ========= Update References
224 //
225 
226 template <ShenandoahGenerationType GENERATION>
227 ShenandoahMarkUpdateRefsClosure<GENERATION>::ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q,
228                                                                              ShenandoahReferenceProcessor* rp,
229                                                                              ShenandoahObjToScanQueue* old_q) :
230   ShenandoahMarkRefsSuperClosure(q, rp, old_q) {
231   assert(_heap->is_stw_gc_in_progress(), "Can only be used for STW GC");
232 }
233 
234 template<ShenandoahGenerationType GENERATION>
235 template<class T>
236 inline void ShenandoahMarkUpdateRefsClosure<GENERATION>::work(T* p) {
237   // Update the location
238   _heap->non_conc_update_with_forwarded(p);
< prev index next >