我是否使用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));
Run Code Online (Sandbox Code Playgroud)
在上面的语句中我是否使用Long [],Integer []或ArrayList,为什么所有这些都使用相同的内存?
这很有道理.在所有情况下,您基本上都在分配一个70000000*的数组(JVM上的引用大小).一个的大小Integer的参考是相同的一个的大小Long的参考,这是相同的作为大小Object参照.在ArrayList情况下,你已经得到了的非常小的额外开销ArrayList的对象本身,而这是相当小-而按照路易斯的评论很容易解释.
如果您实际填充了这些数组,创建了和的实例,那么您会看到不同之处.同样,如果你创建了一个vs ,你会看到一个区别.LongIntegerlong[]int[]
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |