< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp

Print this page
rev 59188 : 8244243: Shenandoah: Cleanup Shenandoah phase timing tracking and JFR event supporting


 177 
 178 public:
 179   ShenandoahDisarmNMethodClosure() :
 180     _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {
 181   }
 182 
 183   virtual void do_nmethod(nmethod* nm) {
 184     _bs->disarm(nm);
 185   }
 186 };
 187 
 188 class ShenandoahDisarmNMethodsTask : public AbstractGangTask {
 189 private:
 190   ShenandoahDisarmNMethodClosure      _cl;
 191   ShenandoahConcurrentNMethodIterator _iterator;
 192 
 193 public:
 194   ShenandoahDisarmNMethodsTask() :
 195     AbstractGangTask("ShenandoahDisarmNMethodsTask"),
 196     _iterator(ShenandoahCodeRoots::table()) {

 197     MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 198     _iterator.nmethods_do_begin();
 199   }
 200 
 201   ~ShenandoahDisarmNMethodsTask() {
 202     MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 203     _iterator.nmethods_do_end();
 204   }
 205 
 206   virtual void work(uint worker_id) {

 207     _iterator.nmethods_do(&_cl);
 208   }
 209 };
 210 
 211 void ShenandoahCodeRoots::disarm_nmethods() {
 212   ShenandoahDisarmNMethodsTask task;
 213   ShenandoahHeap::heap()->workers()->run_task(&task);
 214 }
 215 
 216 class ShenandoahNMethodUnlinkClosure : public NMethodClosure {
 217 private:
 218   bool                      _unloading_occurred;
 219   volatile bool             _failed;
 220   ShenandoahHeap* const     _heap;
 221   BarrierSetNMethod* const  _bs;
 222 
 223   void set_failed() {
 224     Atomic::store(&_failed, true);
 225   }
 226 




 177 
 178 public:
 179   ShenandoahDisarmNMethodClosure() :
 180     _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) {
 181   }
 182 
 183   virtual void do_nmethod(nmethod* nm) {
 184     _bs->disarm(nm);
 185   }
 186 };
 187 
 188 class ShenandoahDisarmNMethodsTask : public AbstractGangTask {
 189 private:
 190   ShenandoahDisarmNMethodClosure      _cl;
 191   ShenandoahConcurrentNMethodIterator _iterator;
 192 
 193 public:
 194   ShenandoahDisarmNMethodsTask() :
 195     AbstractGangTask("ShenandoahDisarmNMethodsTask"),
 196     _iterator(ShenandoahCodeRoots::table()) {
 197     assert(SafepointSynchronize::is_at_safepoint(), "Only at a safepoint");
 198     MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 199     _iterator.nmethods_do_begin();
 200   }
 201 
 202   ~ShenandoahDisarmNMethodsTask() {
 203     MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 204     _iterator.nmethods_do_end();
 205   }
 206 
 207   virtual void work(uint worker_id) {
 208     ShenandoahParallelWorkerSession worker_session(worker_id);
 209     _iterator.nmethods_do(&_cl);
 210   }
 211 };
 212 
 213 void ShenandoahCodeRoots::disarm_nmethods() {
 214   ShenandoahDisarmNMethodsTask task;
 215   ShenandoahHeap::heap()->workers()->run_task(&task);
 216 }
 217 
 218 class ShenandoahNMethodUnlinkClosure : public NMethodClosure {
 219 private:
 220   bool                      _unloading_occurred;
 221   volatile bool             _failed;
 222   ShenandoahHeap* const     _heap;
 223   BarrierSetNMethod* const  _bs;
 224 
 225   void set_failed() {
 226     Atomic::store(&_failed, true);
 227   }
 228 


< prev index next >