< prev index next >

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

Print this page
rev 59438 : 8245823: Shenandoah: inline/optimize ShenandoahEvacOOMScope


  68 }
  69 
  70 inline WorkGang* ShenandoahHeap::get_safepoint_workers() {
  71   return _safepoint_workers;
  72 }
  73 
  74 inline size_t ShenandoahHeap::heap_region_index_containing(const void* addr) const {
  75   uintptr_t region_start = ((uintptr_t) addr);
  76   uintptr_t index = (region_start - (uintptr_t) base()) >> ShenandoahHeapRegion::region_size_bytes_shift();
  77   assert(index < num_regions(), "Region index is in bounds: " PTR_FORMAT, p2i(addr));
  78   return index;
  79 }
  80 
  81 inline ShenandoahHeapRegion* const ShenandoahHeap::heap_region_containing(const void* addr) const {
  82   size_t index = heap_region_index_containing(addr);
  83   ShenandoahHeapRegion* const result = get_region(index);
  84   assert(addr >= result->bottom() && addr < result->end(), "Heap region contains the address: " PTR_FORMAT, p2i(addr));
  85   return result;
  86 }
  87 








  88 template <class T>
  89 inline oop ShenandoahHeap::update_with_forwarded_not_null(T* p, oop obj) {
  90   if (in_collection_set(obj)) {
  91     shenandoah_assert_forwarded_except(p, obj, is_full_gc_in_progress() || cancelled_gc() || is_degenerated_gc_in_progress());
  92     obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
  93     RawAccess<IS_NOT_NULL>::oop_store(p, obj);
  94   }
  95 #ifdef ASSERT
  96   else {
  97     shenandoah_assert_not_forwarded(p, obj);
  98   }
  99 #endif
 100   return obj;
 101 }
 102 
 103 template <class T>
 104 inline oop ShenandoahHeap::maybe_update_with_forwarded(T* p) {
 105   T o = RawAccess<>::oop_load(p);
 106   if (!CompressedOops::is_null(o)) {
 107     oop obj = CompressedOops::decode_not_null(o);




  68 }
  69 
  70 inline WorkGang* ShenandoahHeap::get_safepoint_workers() {
  71   return _safepoint_workers;
  72 }
  73 
  74 inline size_t ShenandoahHeap::heap_region_index_containing(const void* addr) const {
  75   uintptr_t region_start = ((uintptr_t) addr);
  76   uintptr_t index = (region_start - (uintptr_t) base()) >> ShenandoahHeapRegion::region_size_bytes_shift();
  77   assert(index < num_regions(), "Region index is in bounds: " PTR_FORMAT, p2i(addr));
  78   return index;
  79 }
  80 
  81 inline ShenandoahHeapRegion* const ShenandoahHeap::heap_region_containing(const void* addr) const {
  82   size_t index = heap_region_index_containing(addr);
  83   ShenandoahHeapRegion* const result = get_region(index);
  84   assert(addr >= result->bottom() && addr < result->end(), "Heap region contains the address: " PTR_FORMAT, p2i(addr));
  85   return result;
  86 }
  87 
  88 inline void ShenandoahHeap::enter_evacuation(Thread* t) {
  89   _oom_evac_handler.enter_evacuation(t);
  90 }
  91 
  92 inline void ShenandoahHeap::leave_evacuation(Thread* t) {
  93   _oom_evac_handler.leave_evacuation(t);
  94 }
  95 
  96 template <class T>
  97 inline oop ShenandoahHeap::update_with_forwarded_not_null(T* p, oop obj) {
  98   if (in_collection_set(obj)) {
  99     shenandoah_assert_forwarded_except(p, obj, is_full_gc_in_progress() || cancelled_gc() || is_degenerated_gc_in_progress());
 100     obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
 101     RawAccess<IS_NOT_NULL>::oop_store(p, obj);
 102   }
 103 #ifdef ASSERT
 104   else {
 105     shenandoah_assert_not_forwarded(p, obj);
 106   }
 107 #endif
 108   return obj;
 109 }
 110 
 111 template <class T>
 112 inline oop ShenandoahHeap::maybe_update_with_forwarded(T* p) {
 113   T o = RawAccess<>::oop_load(p);
 114   if (!CompressedOops::is_null(o)) {
 115     oop obj = CompressedOops::decode_not_null(o);


< prev index next >