RFR: Make major GC phases exclusive from each other

Aleksey Shipilev shade at redhat.com
Tue Jan 30 10:07:49 UTC 2018


On 01/30/2018 10:54 AM, Roman Kennke wrote:
> This patch makes all the major phases exclusive (marking, evac,
> update-refs, partial and traversal). Barriers are always included, and
> never excluded. This seems cleaner and easier to understand to me.

Yup. Definitely looks better.

> The state bit for 'has-forwarded' is still overlapping. Not sure what to do
> with that.

Nothing, it should be like that by design.

> http://cr.openjdk.java.net/~rkennke/exclusive-gc-phases/webrev.00/

*) The change in shenandoahBarrierSet.cpp is not needed anymore, as the two bits are now exclusive?

 283   if (_heap->is_concurrent_mark_in_progress() && ! _heap->is_concurrent_traversal_in_progress()) {

*) set_gc_state_bit is now misnomer, I think: it is set_gc_state_mask?

*) It also seems possible to put the mask exactly once now?

Instead of:

+   set_gc_state_bit(TRAVERSAL, in_progress);
+   set_gc_state_bit(HAS_FORWARDED, in_progress);

Do:

   set_gc_state_bit(HAS_FORWARDED | TRAVERSAL, in_progress);

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list