< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp
Print this page
rev 57380 : 8234974: Shenandoah: Do concurrent roots even when no evacuation is necessary
*** 109,124 ****
_heap(ShenandoahHeap::heap()), _thread(Thread::current()) {
}
template <class T>
void ShenandoahEvacuateUpdateRootsClosure::do_oop_work(T* p) {
! assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
T o = RawAccess<>::oop_load(p);
if (! CompressedOops::is_null(o)) {
oop obj = CompressedOops::decode_not_null(o);
if (_heap->in_collection_set(obj)) {
shenandoah_assert_marked(p, obj);
oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (resolved == obj) {
resolved = _heap->evacuate_object(obj, _thread);
}
--- 109,125 ----
_heap(ShenandoahHeap::heap()), _thread(Thread::current()) {
}
template <class T>
void ShenandoahEvacuateUpdateRootsClosure::do_oop_work(T* p) {
! assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress");
T o = RawAccess<>::oop_load(p);
if (! CompressedOops::is_null(o)) {
oop obj = CompressedOops::decode_not_null(o);
if (_heap->in_collection_set(obj)) {
+ assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
shenandoah_assert_marked(p, obj);
oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (resolved == obj) {
resolved = _heap->evacuate_object(obj, _thread);
}
*** 137,151 ****
ShenandoahEvacUpdateOopStorageRootsClosure::ShenandoahEvacUpdateOopStorageRootsClosure() :
_heap(ShenandoahHeap::heap()), _thread(Thread::current()) {
}
void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(oop* p) {
! assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
oop obj = RawAccess<>::oop_load(p);
if (! CompressedOops::is_null(obj)) {
if (_heap->in_collection_set(obj)) {
shenandoah_assert_marked(p, obj);
oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (resolved == obj) {
resolved = _heap->evacuate_object(obj, _thread);
}
--- 138,153 ----
ShenandoahEvacUpdateOopStorageRootsClosure::ShenandoahEvacUpdateOopStorageRootsClosure() :
_heap(ShenandoahHeap::heap()), _thread(Thread::current()) {
}
void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(oop* p) {
! assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress");
oop obj = RawAccess<>::oop_load(p);
if (! CompressedOops::is_null(obj)) {
if (_heap->in_collection_set(obj)) {
+ assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress");
shenandoah_assert_marked(p, obj);
oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (resolved == obj) {
resolved = _heap->evacuate_object(obj, _thread);
}
< prev index next >