java - Long Array、Integer Array 和 ArrayList 的内存使用情况

标签 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));

最佳答案

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的评论很容易解释。

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

关于java - Long Array、Integer Array 和 ArrayList 的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13648230/

相关文章:

java - 是否可以从堆转储中实例化 jvm?

java - 如何使用 ActivityTestCase 或 InstrumentationTestCase 测试异常

java - 按开始位置到结束位置将android中的视频切片

Java,子类返回泛型的泛型

Android Studio Libgdx 内存问题

c - 如何为从 c 中的文件读取的一行文本分配足够的内存

java - 服务器与客户端通信问题

powershell - 在远程计算机上运行 Invoke-Command 时出现 OutOfMemory 错误

C 全局指针值在不相关函数调用后发生变化

使用 Capifony 部署 Symfony2 项目时出现 PHP fatal error