Peter is a DZone MVB and is not an employee of DZone and has posted 161 posts at DZone. You can read more from them at their website. View Full User Profile

Java: How much memory do different arrays consume

07.28.2011
| 8030 views |
  • submit to reddit
Arrays can be large and consume a significant amount of memory. It can me worth choosing the most memory efficient array/collection.

Comparing array sizes

How much space does a `new int[1024]` take compared with an `new Integer[1024]`?
int[] ints = new int[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;
compared with
Integer[] ints = new Integer[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;
Note: 1/8th of Integer values will come from the auto-box cache and not use additional memory. All possible Boolean and Byte values are cached.
arraysize in bytes
32-bit JVM
size in bytes
64-bit JVM
new BitSet(1024)168168
new boolean[1024]10401040
new Boolean[1024]41124112
new ArrayList<Boolean>(1024)41364136
new LinkedList<Boolean>() with 10242462424624
new byte[1024]10401040
new Byte[1024]41124112
new ArrayList<Byte>(1024)41364136
new LinkedList<Byte>() with 10242462424624
new char[1024]20642064
new Character[1024]1844818448
new short[1024]20642064
new Short[1024]1844818448
new ArrayList<Character/Short>(1024)1847218472
new LinkedList<Character/Short>() with 10243896038960
new int[1024]41124112
new Integer[1024]1844818448
new float[1024]41124112
new Float[1024]2049620496
new ArrayList<Integer/Float>(1024)1847218472
new LinkedList<Integer/Float>() with 10243896038960
new long[1024]82088208
new Long[1024]1844825616
new double[1024]82088208
new Double[1024]2049628688
new ArrayList<Long/Double>(1024)1847225640
new LinkedList<Long/Double>() with 10243896046128
new String[1024]5246461456
new ArrayList<String>(1024)5248861480
new LinkedList<String>() with 10247297681968
In both cases, Java 6 update 26 was used. For the 64-bit JVM of this version, -XX:+UseCompressedOops is the default option which uses 32-bit references. If you use more than 32 GB of memory, you would need to turn this option off, using more memory for the arrays of objects.

The full code

Is available here: MemoryUsageExamplesTest

From http://vanillajava.blogspot.com/2011/07/java-how-much-memory-do-different.html

Published at DZone with permission of Peter Lawrey, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Tags:

Comments

Jordan Slott replied on Fri, 2011/07/29 - 7:37am

"It can me worth choosing the most memory efficient array/collection." Perhaps you made an editing mistake here?

 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.