< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
Print this page
rev 55429 : 8226311: Shenandoah: Concurrent evacuation of OopStorage backed weak roots
*** 1519,1529 ****
pacer()->setup_for_evac();
}
if (ShenandoahVerify) {
if (ShenandoahConcurrentRoots::should_do_concurrent_roots()) {
! verifier()->verify_roots_no_forwarded_except(ShenandoahRootVerifier::JNIHandleRoots);
} else {
verifier()->verify_roots_no_forwarded();
}
verifier()->verify_during_evacuation();
}
--- 1519,1530 ----
pacer()->setup_for_evac();
}
if (ShenandoahVerify) {
if (ShenandoahConcurrentRoots::should_do_concurrent_roots()) {
! ShenandoahRootVerifier::RootTypes types = ShenandoahRootVerifier::combine(ShenandoahRootVerifier::JNIHandleRoots, ShenandoahRootVerifier::WeakRoots);
! verifier()->verify_roots_no_forwarded_except(types);
} else {
verifier()->verify_roots_no_forwarded();
}
verifier()->verify_during_evacuation();
}
*** 1586,1605 ****
--- 1587,1609 ----
}
class ShenandoahConcurrentRootsEvacUpdateTask : public AbstractGangTask {
private:
ShenandoahJNIHandleRoots<true /*concurrent*/> _jni_roots;
+ ShenandoahWeakRoots<true /*concurrent*/> _weak_roots;
public:
ShenandoahConcurrentRootsEvacUpdateTask() :
AbstractGangTask("Shenandoah Evacuate/Update Concurrent Roots Task") {
}
void work(uint worker_id) {
ShenandoahEvacOOMScope oom;
ShenandoahEvacuateUpdateRootsClosure cl;
+
_jni_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl);
+ _weak_roots.oops_do<ShenandoahEvacuateUpdateRootsClosure>(&cl);
}
};
void ShenandoahHeap::op_roots() {
if (is_evacuation_in_progress() &&
< prev index next >