memory usage of byte[] ?
David Holmes - Sun Microsystems
David.Holmes at Sun.COM
Sun Jul 6 19:36:38 PDT 2008
Hi Ulf,
This may be just a historical relic now. The early Alpha architecture
21064 did not support access to sub-32-bit memory locations. I'm pretty
certain that at least one architecture made the atomicity of accesses
configurable via a control word in the processor - but I can't locate
details as to which one (may have been later Alpha). I did also google
something that indicated that the Cray allows word-tearing :)
Intel, PPC and Sparc all provide atomic accesses - though with Intel's
docs you have to read-between-the-lines a little in places.
Note that we also need aligned accesses to avoid word-tearing on many
architectures - but the VM is pretty rigorous about aligning everything
correctly.
Cheers,
David Holmes
Ulf Zibis said the following on 07/07/08 01:08:
> This is an interesting detail.
>
> Do you know, which systems aren't able to access bytes atomically, and
> which are?
> Intel, AMD, ...
>
> -Ulf
>
>
> Am 06.07.2008 03:35, David Holmes - Sun Microsystems schrieb:
>> Ulf,
>>
>> Peter B. Kessler said the following on 07/06/08 06:26:
>>> Every object in the HotSpot JVM has a 2-word header, where the
>>> word size is 32-bits in the 32-bit JVM and 64-bits in the 64-bit
>>> JVM (duh). An array then has a word that holds the length of
>>> the array. Following that comes the data, in whatever size is
>>> appropriate: boolean and byte elements take 1 byte each, chars
>>> and shorts take 2 bytes, ints and floats take 4 bytes, and longs
>>> and doubles take 8 bytes. References to other objects take either
>>> 4 or 8 bytes depending on whether you are in a 32-bit JVM or a
>>> 64-bit one (with a twist with compressed oops).
>>
>> Might I also point out, however, that the layout of arrays must
>> prevent word-tearing (JLS 3, Section 17.6). So if byte array elements
>> are actually bytes, then the implementation must be able to access
>> them atomically as bytes. On systems that don't support atomic access
>> to sub-word elements, all array elements would have to be word-sized.
>>
>> David Holmes
>>
>>
>>
>
More information about the hotspot-dev
mailing list