Shenandoah 2.0
Simone Bordet
simone.bordet at gmail.com
Mon Sep 30 21:01:36 UTC 2019
Hi,
On Mon, Sep 30, 2019 at 10:35 PM Roman Kennke <rkennke at redhat.com> wrote:
>
> Regarding the traversal mode. It only has a single concurrent phase that
> does all of marking, compacting and updating-references in a single
> pass. It is book-ended by a pause each, similar to init-mark and
> final-update-refs pause to do initialize the traversal and to do some
> bookkeeping and cleanup stuff. The liveness data of one cycle feeds into
> the cset decisions of the subsequent cycle.
Yes I tried to capture that into slide 53.
Is it correct?
> To be honest, I am not sure
> this whole slide needs to exist or only serves to confuse people (even
> more).
Oh. I thought it was ok to have 1 slide about traversal for completeness.
Why you think it's confusing?
And why you say "even more"?
I'd be happy to clarify or remove confusing stuff.
My thinking is that since ZGC and Shenandoah can piggyback Remapping
onto the next Marking, coalescing 2 phases (that I explained in
previous slides already), it's not a big deal to coalesce 3 (and it's
just 1 slide for completeness).
> I'd probably add one or two comparison slides at the end that highlights
> the pros and cons of each one.
"Each one" as in comparison between ZGC and Shenandoah, or "each one"
as in comparison between non-traversal and traversal?
> That's what people usually want to know:
> 'which concurrent GC is for me?'
My experience is typically divided in 2 here, at the ends of the spectrum.
Many don't care at all - give them ZGC or Shenandoah to replace
G1/CMS/Parallel because "it's better" and they switch blindly.
Few are GC maniacs and put 42 command line options to tune everything
because they read so on StackOverflow.
Those that can tell apart ZGC and Shenandoah may have some idea
already of what's better for their use case, but again they are savvy
enough to try both and actually verify what's better for them.
Honestly I can't tell myself.
I like better ZGC for simplicity than Shenandoah.
OTOH, I think Shenandoah is more sophisticated and may deal/degrade
better in edge cases (pacing, degenerate and full).
Plus Shenandoah is available in many architectures, OSes, Java versions.
In edge cases, I'd feel more confident in enlarging the heap than
trying to tune edge cases.
If both GCs are slightly overprovisioned in heap size (so that they
never reach danger zone), GC pauses are basically a solved problem, so
either ZGC or Shenandoah will do the job.
I may be grossly oversimplifying here, but I'm open to hear opinions
from the source ;)
Thanks!
--
Simone Bordet
---
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless. Victoria Livschitz
More information about the shenandoah-dev
mailing list