sizeOf() calculation from ClassLayout seems to be wrong
Enis Söztutar
enis.soz at gmail.com
Tue Jun 7 08:42:56 UTC 2016
Thanks, I was trying to simplify a more complex method in some other test
and seems it got mixed up.
Sorry for the confusion.
Enis
On Tue, Jun 7, 2016 at 12:26 AM, Aleksey Shipilev <
aleksey.shipilev at oracle.com> wrote:
> Hi,
>
> On 06/07/2016 03:47 AM, Enis Söztutar wrote:
> > [B object internals:
> >
> > OFFSET SIZE TYPE DESCRIPTION VALUE
> > 0 4 (object header) 01 00 00 00 (00000001
> > 00000000 00000000 00000000) (1)
> > 4 4 (object header) 00 00 00 00 (00000000
> > 00000000 00000000 00000000) (0)
> > 8 4 (object header) f5 00 00 f8 (11110101
> > 00000000 00000000 11111000) (-134217483)
> > 12 4 (object header) 11 00 00 00 (00010001
> > 00000000 00000000 00000000) (17)
> > 16 17 byte [B.<elements> N/A
> > 33 7 (loss due to the next object alignment)
> >
> > Instance size: 40 bytes
>
> This is a layout for byte[17] -- notice the length field which says
> "17". And this is a correct layout.
>
> > This little UT also fails with the latest source code base:
> >
> > public class ArraySizeTest {
> >
> > @Test
> > public void testByteArraySize() {
> > System.err.println(VM.current().details()); // debug
> >
> > for (int i = 0; i < 100; i++) {
> > byte[] b = new byte[i];
> > long vmSize = VM.current().sizeOf(i);
>
> This calculates the size of boxed Integer "i", not byte[] "b" ;) For
> sure, it is 16 bytes always. If you sizeOf(b), then the test passes on
> all i-s in [0, 100000].
>
> > long clSize = ClassLayout.parseInstance(b).instanceSize();
> > Assert.assertEquals("sizeOf() from VM and ClassLayout does not
> match,
> > VM.sizeOf()="
> > + vmSize + ", ClassLayout.instanceSize()=" + clSize, vmSize,
> clSize
> > );
> > }
> > }
> > }
>
> Thanks,
> -Aleksey
>
>
More information about the jol-dev
mailing list