我是否使用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));
最佳答案
In the above statements Whether i use Long[], Integer[] or ArrayList, why all of them give same memory usage ?
这很有道理。在所有情况下,您基本上都会分配一个 70000000 *(JVM 上的引用大小)的数组。 Integer
引用的大小与 Long
引用的大小相同,而 Long
引用的大小与 Object
引用的大小相同。在ArrayList
情况下,ArrayList
对象本身的额外开销非常小,但这非常小 - 并且根据Louis的评论很容易解释。
如果您实际上填充这些数组,创建Long
和Integer
的实例,那么 你会看到不同。同样,如果您创建了 long[]
与 int[]
,您会看到差异。
关于java - Long Array、Integer Array 和 ArrayList 的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13648230/