memory usage of byte[] ?

David Holmes - Sun Microsystems David.Holmes at Sun.COM
Sat Jul 5 18:35:44 PDT 2008


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