< prev index next >

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

Print this page




  75   HeapWord* addr = (HeapWord*) obj;
  76   return (! allocated_after_next_mark_start(addr)) && _next_mark_bit_map->parMark(addr);
  77 }
  78 
  79 inline bool ShenandoahHeap::is_marked_next(oop obj) const {
  80   HeapWord* addr = (HeapWord*) obj;
  81   return allocated_after_next_mark_start(addr) || _next_mark_bit_map->isMarked(addr);
  82 }
  83 
  84 inline bool ShenandoahHeap::is_marked_complete(oop obj) const {
  85   HeapWord* addr = (HeapWord*) obj;
  86   return allocated_after_complete_mark_start(addr) || _complete_mark_bit_map->isMarked(addr);
  87 }
  88 
  89 inline bool ShenandoahHeap::need_update_refs() const {
  90   return _need_update_refs;
  91 }
  92 
  93 inline size_t ShenandoahHeap::heap_region_index_containing(const void* addr) const {
  94   uintptr_t region_start = ((uintptr_t) addr);
  95   uintptr_t index = (region_start - (uintptr_t) _first_region_bottom) >> ShenandoahHeapRegion::region_size_shift();
  96 #ifdef ASSERT
  97   if (!(index < _num_regions)) {
  98     tty->print_cr("heap region does not contain address, first_region_bottom: "PTR_FORMAT \
  99                   ", real bottom of first region: "PTR_FORMAT", num_regions: "SIZE_FORMAT", region_size: "SIZE_FORMAT,
 100                   p2i(_first_region_bottom),
 101                   p2i(_ordered_regions->get(0)->bottom()),
 102                   _num_regions,
 103                   ShenandoahHeapRegion::region_size_bytes());
 104   }
 105 #endif
 106   assert(index < _num_regions, "heap region index must be in range");
 107   return index;
 108 }
 109 
 110 inline ShenandoahHeapRegion* ShenandoahHeap::heap_region_containing(const void* addr) const {
 111   size_t index = heap_region_index_containing(addr);
 112   ShenandoahHeapRegion* result = _ordered_regions->get(index);
 113 #ifdef ASSERT
 114   if (!(addr >= result->bottom() && addr < result->end())) {
 115     tty->print_cr("heap region does not contain address, first_region_bottom: "PTR_FORMAT \
 116                   ", real bottom of first region: "PTR_FORMAT", num_regions: "SIZE_FORMAT,
 117                   p2i(_first_region_bottom),
 118                   p2i(_ordered_regions->get(0)->bottom()),
 119                   _num_regions);
 120   }
 121 #endif
 122   assert(addr >= result->bottom() && addr < result->end(), "address must be in found region");
 123   return result;
 124 }
 125 
 126 template <class T>
 127 inline oop ShenandoahHeap::update_oop_ref_not_null(T* p, oop obj) {
 128   if (in_collection_set(obj)) {
 129     oop forw = ShenandoahBarrierSet::resolve_oop_static_not_null(obj);
 130     assert(! oopDesc::unsafe_equals(forw, obj) || is_full_gc_in_progress() || cancelled_concgc(), "expect forwarded object");
 131     obj = forw;
 132     oopDesc::encode_store_heap_oop(p, obj);
 133   }
 134 #ifdef ASSERT
 135   else {
 136     assert(oopDesc::unsafe_equals(obj, ShenandoahBarrierSet::resolve_oop_static_not_null(obj)), "expect not forwarded");
 137   }




  75   HeapWord* addr = (HeapWord*) obj;
  76   return (! allocated_after_next_mark_start(addr)) && _next_mark_bit_map->parMark(addr);
  77 }
  78 
  79 inline bool ShenandoahHeap::is_marked_next(oop obj) const {
  80   HeapWord* addr = (HeapWord*) obj;
  81   return allocated_after_next_mark_start(addr) || _next_mark_bit_map->isMarked(addr);
  82 }
  83 
  84 inline bool ShenandoahHeap::is_marked_complete(oop obj) const {
  85   HeapWord* addr = (HeapWord*) obj;
  86   return allocated_after_complete_mark_start(addr) || _complete_mark_bit_map->isMarked(addr);
  87 }
  88 
  89 inline bool ShenandoahHeap::need_update_refs() const {
  90   return _need_update_refs;
  91 }
  92 
  93 inline size_t ShenandoahHeap::heap_region_index_containing(const void* addr) const {
  94   uintptr_t region_start = ((uintptr_t) addr);
  95   uintptr_t index = (region_start - (uintptr_t) base()) >> ShenandoahHeapRegion::region_size_shift();
  96 #ifdef ASSERT
  97   if (!(index < _num_regions)) {
  98     tty->print_cr("heap region does not contain address, heap base: "PTR_FORMAT \
  99                   ", real bottom of first region: "PTR_FORMAT", num_regions: "SIZE_FORMAT", region_size: "SIZE_FORMAT,
 100                   p2i(base()),
 101                   p2i(_ordered_regions->get(0)->bottom()),
 102                   _num_regions,
 103                   ShenandoahHeapRegion::region_size_bytes());
 104   }
 105 #endif
 106   assert(index < _num_regions, "heap region index must be in range");
 107   return index;
 108 }
 109 
 110 inline ShenandoahHeapRegion* ShenandoahHeap::heap_region_containing(const void* addr) const {
 111   size_t index = heap_region_index_containing(addr);
 112   ShenandoahHeapRegion* result = _ordered_regions->get(index);
 113 #ifdef ASSERT
 114   if (!(addr >= result->bottom() && addr < result->end())) {
 115     tty->print_cr("heap region does not contain address, heap base: "PTR_FORMAT \
 116                   ", real bottom of first region: "PTR_FORMAT", num_regions: "SIZE_FORMAT,
 117                   p2i(base()),
 118                   p2i(_ordered_regions->get(0)->bottom()),
 119                   _num_regions);
 120   }
 121 #endif
 122   assert(addr >= result->bottom() && addr < result->end(), "address must be in found region");
 123   return result;
 124 }
 125 
 126 template <class T>
 127 inline oop ShenandoahHeap::update_oop_ref_not_null(T* p, oop obj) {
 128   if (in_collection_set(obj)) {
 129     oop forw = ShenandoahBarrierSet::resolve_oop_static_not_null(obj);
 130     assert(! oopDesc::unsafe_equals(forw, obj) || is_full_gc_in_progress() || cancelled_concgc(), "expect forwarded object");
 131     obj = forw;
 132     oopDesc::encode_store_heap_oop(p, obj);
 133   }
 134 #ifdef ASSERT
 135   else {
 136     assert(oopDesc::unsafe_equals(obj, ShenandoahBarrierSet::resolve_oop_static_not_null(obj)), "expect not forwarded");
 137   }


< prev index next >