< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp

Print this page




 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() :


< prev index next >