Reputation: 151
I'm trying to get a general idea of the memory cost difference between an Integer array and int array. While there seems to be a lot of information out there about the differences between a primitive int and Integer object, I'm still a little confused as to how to calculate the memory costs of an int[] and Integer[] array (overhead costs, padding, etc).
Any help would be appreciated. Thanks!
Upvotes: 1
Views: 1179
Reputation: 2079
Here is a comparison on jdk6u26 of the size of an array of 1024 Integer
s as opposed to 1024 int
s. Note that in the case of anInteger[]
array containing low number Integer
s, these can be shared with other uses of these Integer
s in the JVM by the auto-box cache.
Upvotes: 0
Reputation: 727047
In addition to storing the length of the array, an array of int
s needs space for N 4-byte elements, while an array of Integer
s needs space for N references, whose size is platform-dependent; commonly, that would be 4 bytes on 32-bit platforms or 8 bytes on 64-bit platforms.
As far as int[]
goes, there is no additional memory required to store data. Integer[]
, on the other hand, needs objects of type Integer
, which could be all distinct or shared (e.g. through interning of small numbers implemented by the Java platform itself). Therefore, Integer[]
requires up to N additional objects, each one containing a 4-byte int
.
Assuming that all Integer
s in an Integer[]
array are distinct objects, the array and its content will take two to three times the space of an int[]
array. On the other hand, if all objects are shared, and the memory costs of shared objects are accounted for, there may be no additional overhead at all (on 32-bit platforms) or the there would be a 2x overhead on 64-bit platforms.
Upvotes: 8