--- old/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp 2020-01-24 15:21:08.392544321 +0100 +++ new/src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.inline.hpp 2020-01-24 15:21:08.176540690 +0100 @@ -33,15 +33,16 @@ inline bool ShenandoahMarkingContext::mark(oop obj) { shenandoah_assert_not_forwarded(NULL, obj); - return (! allocated_after_mark_start(obj)) && _mark_bit_map.par_mark(obj); + HeapWord* addr = cast_from_oop(obj); + return (! allocated_after_mark_start(addr)) && _mark_bit_map.par_mark(addr); } inline bool ShenandoahMarkingContext::is_marked(oop obj) const { - return allocated_after_mark_start(obj) || _mark_bit_map.is_marked(obj); + HeapWord* addr = cast_from_oop(obj); + return allocated_after_mark_start(addr) || _mark_bit_map.is_marked(addr); } -inline bool ShenandoahMarkingContext::allocated_after_mark_start(oop obj) const { - HeapWord* addr = cast_from_oop(obj); +inline bool ShenandoahMarkingContext::allocated_after_mark_start(HeapWord* addr) const { uintx index = ((uintx) addr) >> ShenandoahHeapRegion::region_size_bytes_shift(); HeapWord* top_at_mark_start = _top_at_mark_starts[index]; bool alloc_after_mark_start = addr >= top_at_mark_start;