Humongous objects vs. ShenandoahHumongousMoves

Holger Hoffstätte holger at
Mon Oct 7 13:07:08 UTC 2019


While spelunking around in JDK13's Shenandoah flags I found
ShenandoahHumongousMoves, which is *en*abled by default.

This made me curious: why would it make sense to copy large objects around
(a potentially rather slow thing in terms of memory bandwidth) when they are
likely to live long and cover multiple pages (or a large one)?
My understanding was that this was only really necessary for compacting linearly
allocated heaps (like e.g. ParallelGC), but not for regionalized GCs where
you can just reuse/deallocate regions in the middle of your heap.

In other words, what disadvantages would disabling this have? More and/or
less compacted regions? Intuitively it seems to me that this would likely be
in the noise (esp. the larger the allocated heap gets), but then I figured
this is likely enabled for a good reason.


More information about the shenandoah-dev mailing list