< prev index next > src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp
Print this page
#include "gc/shenandoah/shenandoahNMethod.inline.hpp"
#include "gc/shenandoah/shenandoahUtils.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "runtime/atomicAccess.hpp"
+ #include "utilities/events.hpp"
#include "utilities/powerOfTwo.hpp"
ShenandoahNMethodTable* ShenandoahCodeRoots::_nmethod_table;
int ShenandoahCodeRoots::_disarmed_value = 1;
void ShenandoahCodeRoots::arm_nmethods() {
BarrierSet::barrier_set()->barrier_set_nmethod()->arm_all_nmethods();
}
- class ShenandoahDisarmNMethodClosure : public NMethodClosure {
- public:
- virtual void do_nmethod(nmethod* nm) {
- ShenandoahNMethod::disarm_nmethod(nm);
- }
- };
-
- class ShenandoahDisarmNMethodsTask : public WorkerTask {
- private:
- ShenandoahDisarmNMethodClosure _cl;
- ShenandoahConcurrentNMethodIterator _iterator;
-
- public:
- ShenandoahDisarmNMethodsTask() :
- WorkerTask("Shenandoah Disarm NMethods"),
- _iterator(ShenandoahCodeRoots::table()) {
- assert(SafepointSynchronize::is_at_safepoint(), "Only at a safepoint");
- }
-
- virtual void work(uint worker_id) {
- ShenandoahParallelWorkerSession worker_session(worker_id);
- _iterator.nmethods_do(&_cl);
- }
- };
-
- void ShenandoahCodeRoots::disarm_nmethods() {
- ShenandoahDisarmNMethodsTask task;
- ShenandoahHeap::heap()->workers()->run_task(&task);
- }
-
class ShenandoahNMethodUnlinkClosure : public NMethodClosure {
private:
bool _unloading_occurred;
ShenandoahHeap* const _heap;
BarrierSetNMethod* const _bs;
< prev index next >