RFR: Full GC should not trash empty regions
Roman Kennke
rkennke at redhat.com
Tue Mar 20 16:13:51 UTC 2018
Am 20.03.2018 um 16:44 schrieb Aleksey Shipilev:
> http://cr.openjdk.java.net/~shade/shenandoah/fullgc-lazier-empty/webrev.01/
>
> Our Full GC code brings up all empty regions to R-state before the collection. It does so
> anticipating the moves into the regions, and relies on R-transition to bring the region into the
> committed state. At the end of the collection, it examines the R-state regions, and trashes those
> that have no live data, which also covers the E-state regions we have turned into R-state at the
> beginning.
>
> It works well, but it is excessive: Full GC at semi-full heap would have lots of E-state regions
> that would still be in E-state at the end of the cycle. Current code transits them through
> E->R->T->E anyway. It is a small wrinkle, until we get the fastdebug build, which zaps the unused
> heap area, and does so per-region during T->E transition. So, we zap the E-state regions again, even
> though they are already zapped by construction, and that costs us a lot.
>
> With this fix, AllocObjects with fastdebug/aggressive+EvacOOMALot is at least 5x faster, and stops
> timing out every so often on slower machines.
>
> Testing: hotspot_gc_shenandoah
>
> Thanks,
> -Aleksey
>
>
Ok good
More information about the shenandoah-dev
mailing list