2012-11-30 39 views
0

無論我使用Long[]Integer[]還是ArrayList<Integer>,爲什麼它們都返回相同的內存使用量?長整型數組ArrayList和ArrayList的內存使用情況

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)); 
+3

因爲您的測量方法是完全不準確的。 'System.gc()'是「嘿,你可能在不久的將來可能在某個時候GC?」和'Runtime.getRuntime()。totalMemory()'是一個非常粗略的近似值,它可以被忽略掉。 –

+4

這和Spring和Hibernate有什麼關係? –

回答

6

在上面的報表是否我用龍[]整數[]或ArrayList中,爲什麼所有的人都給予相同的內存使用情況?

它非常有意義。在所有情況下,基本上都是分配一個70000000 *(JVM上的引用大小)的數組。 Integer參考的大小與Long參考的大小相同,這與參考文獻Object的大小相同。在ArrayList的情況下,您已經獲得了ArrayList對象本身的額外開銷,但這非常小 - 並且可以按照Louis的評論輕鬆解釋。

如果你真的填充這些陣列,創建實例LongInteger然後你會看到一個差異。同樣,如果您創建了long[]而不是int[],則會看到差異。