RFR: On-demand commit as heap resizing strategy

Zhengyu Gu zgu at redhat.com
Tue Aug 29 18:09:34 UTC 2017


Okay.

-Zhengyu

On 08/29/2017 12:28 PM, Aleksey Shipilev wrote:
> Hi,
> 
> One of the adopters' GC logs I looked into had this weird initial burst of GC cycles, counting
> minutes in total. The cause was the omitted -Xms option that made Shenandoah try to operate on much
> smaller -Xms heap with back-to-back GC cycles, until we "luckily" run into freeset exhaustion and
> the associated heap resizing.
> 
> Recent work around region state handling enables us to rethink the heap resizing strategy in
> commit/uncommit sequences. Uncommit part is already functional (see ShenandoahUncommitDelay), and we
> might want to redo the commit part now:
>    http://cr.openjdk.java.net/~shade/shenandoah/heap-expansion-commit/webrev.01/
> 
> This does several things:
>    a) Instantiates all regions upfront, but keeps some of them uncommitted. -Xms now defines the
> number of initially committed regions;
>    b) Removes the distinction between max_regions and num_regions, because now we have the constant
> number of regions in the heap;
>    c) Simplifies allocation logic, because it does not have to care about adding regions anymore --
> the "expansion" is now implicit, as allocation code would try to commit regions on-demand. Failure
> to provide -Xms (or providing a bad value) would be innocuous;
>    d) Handles AlwaysPreTouch a bit better: touches everything up to Xmx, not Xms, as before;
> 
> After this, -Xmx defines everything.
> 
> Further work that I want to defer to other patches:
>    - I had to disable TestHeapAlloc test, because we don't expand the heap as the test expects to. We
> would revisit this when handling commit failures for individual regions.
>    - VirtualSpace is almost not needed for ShenandoahHeap now, used only in monitoring -- we can
> purge it later;
> 
> Testing: hotspot_gc_shenandoah, RSS tests
> 
> Thanks,
> -Aleksey
> 


More information about the shenandoah-dev mailing list