100 } else { 101 shenandoah_assert_not_forwarded(p, obj); 102 } 103 } 104 } 105 106 void ShenandoahTraversalUpdateRefsClosure::do_oop(oop* p) { do_oop_work(p); } 107 void ShenandoahTraversalUpdateRefsClosure::do_oop(narrowOop* p) { do_oop_work(p); } 108 109 ShenandoahEvacuateUpdateRootsClosure::ShenandoahEvacuateUpdateRootsClosure() : 110 _heap(ShenandoahHeap::heap()), _thread(Thread::current()) { 111 } 112 113 template <class T> 114 void ShenandoahEvacuateUpdateRootsClosure::do_oop_work(T* p) { 115 assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress"); 116 117 T o = RawAccess<>::oop_load(p); 118 if (! CompressedOops::is_null(o)) { 119 oop obj = CompressedOops::decode_not_null(o); 120 if (_heap->in_collection_set(obj)) { 121 assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress"); 122 shenandoah_assert_marked(p, obj); 123 oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj); 124 if (resolved == obj) { 125 resolved = _heap->evacuate_object(obj, _thread); 126 } 127 RawAccess<IS_NOT_NULL>::oop_store(p, resolved); 128 } 129 } 130 } 131 void ShenandoahEvacuateUpdateRootsClosure::do_oop(oop* p) { 132 do_oop_work(p); 133 } 134 135 void ShenandoahEvacuateUpdateRootsClosure::do_oop(narrowOop* p) { 136 do_oop_work(p); 137 } 138 139 ShenandoahEvacUpdateOopStorageRootsClosure::ShenandoahEvacUpdateOopStorageRootsClosure() : | 100 } else { 101 shenandoah_assert_not_forwarded(p, obj); 102 } 103 } 104 } 105 106 void ShenandoahTraversalUpdateRefsClosure::do_oop(oop* p) { do_oop_work(p); } 107 void ShenandoahTraversalUpdateRefsClosure::do_oop(narrowOop* p) { do_oop_work(p); } 108 109 ShenandoahEvacuateUpdateRootsClosure::ShenandoahEvacuateUpdateRootsClosure() : 110 _heap(ShenandoahHeap::heap()), _thread(Thread::current()) { 111 } 112 113 template <class T> 114 void ShenandoahEvacuateUpdateRootsClosure::do_oop_work(T* p) { 115 assert(_heap->is_concurrent_root_in_progress(), "Only do this when evacuation is in progress"); 116 117 T o = RawAccess<>::oop_load(p); 118 if (! CompressedOops::is_null(o)) { 119 oop obj = CompressedOops::decode_not_null(o); 120 assert_object_is_in_heap(p, obj); 121 122 if (_heap->in_collection_set(obj)) { 123 assert(_heap->is_evacuation_in_progress(), "Only do this when evacuation is in progress"); 124 shenandoah_assert_marked(p, obj); 125 oop resolved = ShenandoahBarrierSet::resolve_forwarded_not_null(obj); 126 if (resolved == obj) { 127 resolved = _heap->evacuate_object(obj, _thread); 128 } 129 RawAccess<IS_NOT_NULL>::oop_store(p, resolved); 130 } 131 } 132 } 133 void ShenandoahEvacuateUpdateRootsClosure::do_oop(oop* p) { 134 do_oop_work(p); 135 } 136 137 void ShenandoahEvacuateUpdateRootsClosure::do_oop(narrowOop* p) { 138 do_oop_work(p); 139 } 140 141 ShenandoahEvacUpdateOopStorageRootsClosure::ShenandoahEvacUpdateOopStorageRootsClosure() : |