RFR: Make partial GC concurrent

Roman Kennke rkennke at redhat.com
Mon Oct 9 17:44:41 UTC 2017


Am 09.10.2017 um 19:40 schrieb Christine Flood:
> Couple of quick high level questions to be sure I understand....
>
> If we have a partial collection in the middle of concurrent marking, 
> we ignore pointers into the collection set (from regions) and we treat 
> all pointers into the to-regions as live?  Or do we do something more 
> clever?  It seems like this can leave garbage on the table.
Partial cannot happen in the middle of conc-mark. We drive either 
conc-mark or conc-partial, we don't mix them up.

> What happens if we cancel a conc partial gc?  Do we have to do a 
> complete update-refs phase?
We slide into full-gc which will update everything.

> I'm worried that there's a window where these flags are inconsistent.  
> Are we sure that nothing bad can happen?
>
> + void ShenandoahHeap::set_concurrent_partial_in_progress(bool 
> in_progress) {
> + _concurrent_partial_in_progress = in_progress;
> + 
> JavaThread::satb_mark_queue_set().set_active_all_threads(in_progress, 
> !in_progress);
> + set_evacuation_in_progress_at_safepoint(in_progress);
> + }
> +
This happens during STW. I cannot see how bad things can happen (esp. 
given that conc-mark and conc-partial don't mix).

Roman


More information about the shenandoah-dev mailing list