Master Thesis on Shenandoah

Roman Kennke rkennke at redhat.com
Wed Nov 8 18:13:21 UTC 2017


Am 08.11.2017 um 19:07 schrieb Dominik Inführ:
> On Wed, Nov 8, 2017 at 4:33 PM, Roman Kennke <rkennke at redhat.com 
> <mailto:rkennke at redhat.com>> wrote:
>
>     Am 08.11.2017 um 16:14 schrieb Christine Flood:
>
>         Roman wrote:
>
>             "Yes. Then we might be lucky and squeeze it in a leftover
>         word from
>         alignment or squeeze it into the gap left by the compressed
>         Klass* (for
>         non-arrays) or such."
>
>         At the cost of a significantly more expensive read barrier. 
>         My guess is
>         that it would add a minimum of a shift and an add.
>
>     No. Well, kinda. We would compress the fwd ptr just like any other
>     oop, at the same cost.
>     The Klass* leaves 32bit gap, but only for instances, not for
>     arrays. This means we'd have to conditionally generate different
>     barriers depending on our knowledge of the object: 1. for
>     instances, read fwdptr from klass gap 2. for arrays, read fwdptr
>     from elsewhere 3. for unknown generate conditional read-barrier to
>     figure it out at runtime (I expect this to be rare). 
>
>
> What's the reason that the fwdptr can't be on the same offset for 
> non-arrays and arrays? At least the shift+add could be done in one 
> instruction on x64 (with lea - but only for object alignment 8) and 
> aarch64 (add with lsl).
I was pondering the idea to squeeze the fwd ptr into the so-called 
Klass-gap. This is 32 unused bits when the Klass* is compressed. It's 
only available for non-arrays, because for arrays, the array-length is 
squeezed into those 32bits.
>
>     All in all, I doubt it's worth the troubles.
>
>
> I suppose you mean the whole project?
Eh, no. I mean special-casing code generation for reading the fwd ptr 
from different offsets for instances vs arrays. :-)


Roman


More information about the shenandoah-dev mailing list