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