< prev index next >

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

Print this page
rev 57380 : 8234974: Shenandoah: Do concurrent roots even when no evacuation is necessary

*** 77,87 **** class ShenandoahIsUnloadingBehaviour : public IsUnloadingBehaviour { public: virtual bool is_unloading(CompiledMethod* method) const { nmethod* const nm = method->as_nmethod(); ! guarantee(ShenandoahHeap::heap()->is_evacuation_in_progress(), "Only this phase"); ShenandoahNMethod* data = ShenandoahNMethod::gc_data(nm); ShenandoahReentrantLocker locker(data->lock()); ShenandoahIsUnloadingOopClosure cl; data->oops_do(&cl); return cl.is_unloading(); --- 77,87 ---- class ShenandoahIsUnloadingBehaviour : public IsUnloadingBehaviour { public: virtual bool is_unloading(CompiledMethod* method) const { nmethod* const nm = method->as_nmethod(); ! guarantee(ShenandoahHeap::heap()->is_concurrent_root_in_progress(), "Only this phase"); ShenandoahNMethod* data = ShenandoahNMethod::gc_data(nm); ShenandoahReentrantLocker locker(data->lock()); ShenandoahIsUnloadingOopClosure cl; data->oops_do(&cl); return cl.is_unloading();
*** 164,174 **** void do_thread(Thread* thread) {} }; void ShenandoahUnload::unload() { assert(ShenandoahConcurrentRoots::can_do_concurrent_class_unloading(), "Why we here?"); ! if (!ShenandoahHeap::heap()->is_evacuation_in_progress()) { return; } // Unlink stale metadata and nmethods unlink(); --- 164,174 ---- void do_thread(Thread* thread) {} }; void ShenandoahUnload::unload() { assert(ShenandoahConcurrentRoots::can_do_concurrent_class_unloading(), "Why we here?"); ! if (!ShenandoahHeap::heap()->is_concurrent_root_in_progress()) { return; } // Unlink stale metadata and nmethods unlink();
< prev index next >