108 template <class T> 109 inline void PSParallelCompact::adjust_pointer(T* p, ParCompactionManager* cm) { 110 T heap_oop = RawAccess<>::oop_load(p); 111 if (!CompressedOops::is_null(heap_oop)) { 112 oop obj = CompressedOops::decode_not_null(heap_oop); 113 assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap"); 114 115 oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm); 116 assert(new_obj != NULL, // is forwarding ptr? 117 "should be forwarded"); 118 // Just always do the update unconditionally? 119 if (new_obj != NULL) { 120 assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj), 121 "should be in object space"); 122 RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj); 123 } 124 } 125 } 126 127 template <typename T> 128 void PSParallelCompact::AdjustPointerClosure::do_oop_nv(T* p) { 129 adjust_pointer(p, _cm); 130 } 131 132 inline void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { do_oop_nv(p); } 133 inline void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { do_oop_nv(p); } 134 135 #endif // SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_INLINE_HPP | 108 template <class T> 109 inline void PSParallelCompact::adjust_pointer(T* p, ParCompactionManager* cm) { 110 T heap_oop = RawAccess<>::oop_load(p); 111 if (!CompressedOops::is_null(heap_oop)) { 112 oop obj = CompressedOops::decode_not_null(heap_oop); 113 assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap"); 114 115 oop new_obj = (oop)summary_data().calc_new_pointer(obj, cm); 116 assert(new_obj != NULL, // is forwarding ptr? 117 "should be forwarded"); 118 // Just always do the update unconditionally? 119 if (new_obj != NULL) { 120 assert(ParallelScavengeHeap::heap()->is_in_reserved(new_obj), 121 "should be in object space"); 122 RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj); 123 } 124 } 125 } 126 127 template <typename T> 128 void PSParallelCompact::AdjustPointerClosure::do_oop_work(T* p) { 129 adjust_pointer(p, _cm); 130 } 131 132 inline void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { do_oop_work(p); } 133 inline void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { do_oop_work(p); } 134 135 #endif // SHARE_VM_GC_PARALLEL_PSPARALLELCOMPACT_INLINE_HPP |