< prev index next >

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

Print this page

127 
128   oop obj = RawAccess<>::oop_load(p);
129   if (! CompressedOops::is_null(obj)) {
130     if (_heap->in_collection_set(obj)) {
131       assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
132       shenandoah_assert_marked(p, obj);
133       oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
134       if (resolved == obj) {
135         resolved = _heap->evacuate_object(obj, _thread);
136       }
137 
138       Atomic::cmpxchg(p, obj, resolved);
139     }
140   }
141 }
142 
143 void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(narrowOop* p) {
144   ShouldNotReachHere();
145 }
146 





























147 ShenandoahCodeBlobAndDisarmClosure::ShenandoahCodeBlobAndDisarmClosure(OopClosure* cl) :
148   CodeBlobToOopClosure(cl, true /* fix_relocations */),
149    _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {
150 }
151 
152 void ShenandoahCodeBlobAndDisarmClosure::do_code_blob(CodeBlob* cb) {
153   nmethod* const nm = cb->as_nmethod_or_null();
154   if (nm != NULL && nm->oops_do_try_claim()) {
155     assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here");
156     CodeBlobToOopClosure::do_code_blob(cb);
157     _bs->disarm(nm);
158   }
159 }
160 
161 ShenandoahRendezvousClosure::ShenandoahRendezvousClosure() :
162   HandshakeClosure("ShenandoahRendezvous") {
163 }
164 
165 void ShenandoahRendezvousClosure::do_thread(Thread* thread) {
166 }

127 
128   oop obj = RawAccess<>::oop_load(p);
129   if (! CompressedOops::is_null(obj)) {
130     if (_heap->in_collection_set(obj)) {
131       assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
132       shenandoah_assert_marked(p, obj);
133       oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
134       if (resolved == obj) {
135         resolved = _heap->evacuate_object(obj, _thread);
136       }
137 
138       Atomic::cmpxchg(p, obj, resolved);
139     }
140   }
141 }
142 
143 void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(narrowOop* p) {
144   ShouldNotReachHere();
145 }
146 
147 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
148 ShenandoahCleanUpdateWeakOopsClosure<CONCURRENT, IsAlive, KeepAlive>::ShenandoahCleanUpdateWeakOopsClosure(IsAlive* is_alive, KeepAlive* keep_alive) :
149   _is_alive(is_alive), _keep_alive(keep_alive) {
150   if (!CONCURRENT) {
151     assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
152   }
153 }
154 
155 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
156 void ShenandoahCleanUpdateWeakOopsClosure<CONCURRENT, IsAlive, KeepAlive>::do_oop(oop* p) {
157   oop obj = RawAccess<>::oop_load(p);
158   if (!CompressedOops::is_null(obj)) {
159     if (_is_alive->do_object_b(obj)) {
160       _keep_alive->do_oop(p);
161     } else {
162       if (CONCURRENT) {
163         Atomic::cmpxchg(p, obj, oop());
164       } else {
165         RawAccess<IS_NOT_NULL>::oop_store(p, oop());
166       }
167     }
168   }
169 }
170 
171 template <bool CONCURRENT, typename IsAlive, typename KeepAlive>
172 void ShenandoahCleanUpdateWeakOopsClosure<CONCURRENT, IsAlive, KeepAlive>::do_oop(narrowOop* p) {
173   ShouldNotReachHere();
174 }
175 
176 ShenandoahCodeBlobAndDisarmClosure::ShenandoahCodeBlobAndDisarmClosure(OopClosure* cl) :
177   CodeBlobToOopClosure(cl, true /* fix_relocations */),
178    _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {
179 }
180 
181 void ShenandoahCodeBlobAndDisarmClosure::do_code_blob(CodeBlob* cb) {
182   nmethod* const nm = cb->as_nmethod_or_null();
183   if (nm != NULL && nm->oops_do_try_claim()) {
184     assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here");
185     CodeBlobToOopClosure::do_code_blob(cb);
186     _bs->disarm(nm);
187   }
188 }
189 
190 ShenandoahRendezvousClosure::ShenandoahRendezvousClosure() :
191   HandshakeClosure("ShenandoahRendezvous") {
192 }
193 
194 void ShenandoahRendezvousClosure::do_thread(Thread* thread) {
195 }
< prev index next >