--- old/src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp 2017-10-05 21:08:02.977147631 +0200 +++ new/src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp 2017-10-05 21:08:02.866147360 +0200 @@ -63,7 +63,7 @@ * been marked by this thread. Returns false if the object has already been marked, * or if a competing thread succeeded in marking this object. */ -inline bool ShenandoahHeap::mark_next(oop obj) const { +inline bool ShenandoahHeap::mark(oop obj) const { #ifdef ASSERT if (! oopDesc::unsafe_equals(obj, oopDesc::bs()->read_barrier(obj))) { tty->print_cr("heap region containing obj:"); @@ -76,22 +76,17 @@ #endif assert(oopDesc::unsafe_equals(obj, oopDesc::bs()->read_barrier(obj)), "only mark forwarded copy of objects"); - return mark_next_no_checks(obj); + return mark_no_checks(obj); } -inline bool ShenandoahHeap::mark_next_no_checks(oop obj) const { +inline bool ShenandoahHeap::mark_no_checks(oop obj) const { HeapWord* addr = (HeapWord*) obj; - return (! allocated_after_next_mark_start(addr)) && _next_mark_bit_map->parMark(addr); + return (! allocated_after_mark_start(addr)) && _mark_bit_map->parMark(addr); } -inline bool ShenandoahHeap::is_marked_next(oop obj) const { +inline bool ShenandoahHeap::is_marked(oop obj) const { HeapWord* addr = (HeapWord*) obj; - return allocated_after_next_mark_start(addr) || _next_mark_bit_map->isMarked(addr); -} - -inline bool ShenandoahHeap::is_marked_complete(oop obj) const { - HeapWord* addr = (HeapWord*) obj; - return allocated_after_complete_mark_start(addr) || _complete_mark_bit_map->isMarked(addr); + return allocated_after_mark_start(addr) || _mark_bit_map->isMarked(addr); } inline bool ShenandoahHeap::need_update_refs() const { @@ -397,7 +392,7 @@ } inline bool ShenandoahHeap::requires_marking(const void* entry) const { - return ! is_marked_next(oop(entry)); + return ! is_marked(oop(entry)); } bool ShenandoahHeap::region_in_collection_set(size_t region_index) const { @@ -438,16 +433,9 @@ return (address) &(ShenandoahHeap::heap()->_evacuation_in_progress); } -inline bool ShenandoahHeap::allocated_after_next_mark_start(HeapWord* addr) const { - uintx index = ((uintx) addr) >> ShenandoahHeapRegion::region_size_bytes_shift(); - HeapWord* top_at_mark_start = _next_top_at_mark_starts[index]; - bool alloc_after_mark_start = addr >= top_at_mark_start; - return alloc_after_mark_start; -} - -inline bool ShenandoahHeap::allocated_after_complete_mark_start(HeapWord* addr) const { +inline bool ShenandoahHeap::allocated_after_mark_start(HeapWord* addr) const { uintx index = ((uintx) addr) >> ShenandoahHeapRegion::region_size_bytes_shift(); - HeapWord* top_at_mark_start = _complete_top_at_mark_starts[index]; + HeapWord* top_at_mark_start = _top_at_mark_starts[index]; bool alloc_after_mark_start = addr >= top_at_mark_start; return alloc_after_mark_start; } @@ -467,15 +455,16 @@ assert(BrooksPointer::word_offset() < 0, "skip_delta calculation below assumes the forwarding ptr is before obj"); assert(! region->is_humongous_continuation(), "no humongous continuation regions here"); + assert(is_bitmap_valid(), "only try this with complete marking bitmap"); - MarkBitMap* mark_bit_map = _complete_mark_bit_map; - HeapWord* top_at_mark_start = complete_top_at_mark_start(region->bottom()); + MarkBitMap* mark_bit_map = _mark_bit_map; + HeapWord* tams = top_at_mark_start(region->bottom()); size_t skip_bitmap_delta = BrooksPointer::word_size() + 1; size_t skip_objsize_delta = BrooksPointer::word_size() /* + actual obj.size() below */; HeapWord* start = region->bottom() + BrooksPointer::word_size(); - HeapWord* end = MIN2(top_at_mark_start + BrooksPointer::word_size(), region->end()); + HeapWord* end = MIN2(tams + BrooksPointer::word_size(), region->end()); HeapWord* addr = mark_bit_map->getNextMarkedWordAddress(start, end); intx dist = ShenandoahMarkScanPrefetch; @@ -503,7 +492,7 @@ Prefetch::read(addr, BrooksPointer::byte_offset()); oop obj = oop(addr); slots[avail++] = obj; - if (addr < top_at_mark_start) { + if (addr < tams) { addr += skip_bitmap_delta; addr = mark_bit_map->getNextMarkedWordAddress(addr, end); } else { @@ -532,7 +521,7 @@ int size = obj->size(); do_marked_object(mark_bit_map, cl, obj); addr += size + skip_objsize_delta; - if (addr < top_at_mark_start) { + if (addr < tams) { addr = mark_bit_map->getNextMarkedWordAddress(addr, end); } } @@ -544,8 +533,8 @@ assert(!oopDesc::is_null(obj), "sanity"); assert(oopDesc::is_oop(obj), "sanity"); assert(is_in(obj), "sanity"); - assert(bitmap == _complete_mark_bit_map, "only iterate completed mark bitmap"); - assert(is_marked_complete(obj), "object expected to be marked"); + assert(bitmap == _mark_bit_map, "only iterate completed mark bitmap"); + assert(is_marked(obj), "object expected to be marked"); cl->do_object(obj); }