ArrayStoreException: bug or expected behavior?

Michael Hoffer info at michaelhoffer.de
Fri Jul 26 12:09:34 UTC 2019


> It does not translate Point2D to Point2D? but simply allocates the inline type on the Java heap and
> stores a reference to it in the interface array.

That’s good news. So there are no conversion costs involved.

> If you are referring to the memory layout of a flattened array Point2D[] then yes, these are not
> available with your interface array.

Makes sense.

> Other than memory layout, one of the biggest optimization opportunities for inline types is that
> they can always be scalarized by the just in time compiler (i.e. passed in registers or on the stack).

Thanks. That helps a lot!

Regards,
Michael

--
Dr. Michael Hoffer

Web:    mihosoft.eu
Twitter: @mihosoft

Goethe-Zentrum für Wissenschaftliches Rechnen (G-CSC)
Goethe-Universität
Kettenhofweg 139
60325 Frankfurt am Main
phone: +49 69 798 25254
info at michaelhoffer.de

> Am 26.07.2019 um 13:54 schrieb Tobias Hartmann <tobias.hartmann at oracle.com>:
> 
> On 26.07.19 13:32, Michael Hoffer wrote:
>> A follow-up question: the following code automatically translates Point2D into Point2D?. Is this
>> assumption correct?
> 
> It does not translate Point2D to Point2D? but simply allocates the inline type on the Java heap and
> stores a reference to it in the interface array.
> 
>> Does this mean that the reduction in required memory and the cache optimal
>> layout are lost in this case?
> 
> If you are referring to the memory layout of a flattened array Point2D[] then yes, these are not
> available with your interface array.
> 
> In memory terms, this creates an array of pointers:
> 
>>         Point2DI[] points = new Point2DI[n];
> 
> And the following loop stores pointers to Point2D into that array:
> 
>>         for(int i = 0; i < points.length;i++) {
>>             points[i] = new Point2D(i, i);
>>         }
> 
> Other than memory layout, one of the biggest optimization opportunities for inline types is that
> they can always be scalarized by the just in time compiler (i.e. passed in registers or on the stack).
> 
> Hope that helps.
> 
> Best regards,
> Tobias



More information about the valhalla-dev mailing list