Array of Long,Array of Integer和ArrayList的内存使用情况

时间:2012-11-30 15:32:35

标签: java memory

无论我使用Long[]Integer[]还是ArrayList<Integer>,为什么所有这些都会返回相同的内存使用量?

System.out.println("Memory Usage : " + Runtime.getRuntime().totalMemory()/(1024*1024));
System.out.println("Memory Usage : " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));

//Long[] aa = new Long[70000000];
Integer[] bb = new Integer[70000000];
//ArrayList<Integer> a = new ArrayList<Integer>(70000000);

System.gc();

System.out.println("Memory Usage : " + Runtime.getRuntime().totalMemory()/(1024*1024));
System.out.println("Memory Usage : " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));

1 个答案:

答案 0 :(得分:6)

  

在上面的语句中我是否使用Long [],Integer []或ArrayList,为什么所有这些都使用相同的内存?

这很有道理。在所有情况下,您基本上都在分配一个70000000 *的数组(JVM上的引用大小)。 Integer引用的大小与Long引用的大小相同,后者与Object引用的大小相同。在ArrayList情况下,ArrayList对象本身的额外开销非常小,但这个数字非常小 - 并且根据路易斯的评论很容易解释。

如果你实际填充那些数组,创建LongInteger实例那么你会看到差异。同样,如果您创建了long[]int[],则会看到差异。