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