RFR: Handle checkcast arraycopy correctly in barriers. Make arraycopy+barriers a single loop.

Aleksey Shipilev shade at redhat.com
Tue Feb 27 13:40:25 UTC 2018


On 02/27/2018 02:34 PM, Roman Kennke wrote:
> Just when I pushed, I hit this assert:
> 
> #  Internal Error
> (/home/rkennke/src/openjdk/shenandoah-jdk/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp:285),
> pid=1884, tid=1911
> #  assert(heap->is_stable() || heap->is_evacuation_in_progress())
> failed: must not have anything in progress
> 
> 
> The issue there is that it can't be stable because it has the
> has_forwarded bit set, which is valid (and obvious) at this point.
> Should we relax the is_stable() property or go back to checking that
> none stuff is in_progress as before?

Yeah, I think it should be:

   assert(heap->is_idle() || heap->is_evacuation_in_progress(), "must not have anything in progress");

...where is_idle() is something like:

 is_set(~ShenandoahHeap::HAS_FORWARDED_OBJECTS);

That way the assert would still capture any new state bit that we would introduce later.

-Aleksey



More information about the shenandoah-dev mailing list