java - 在二维数组中切换数组大小需要不同的内存量

标签 java arrays memory multidimensional-array

我在 Java 中声明了一个字节类型的二维数组矩阵。在检查尺寸为 (10^6 x 4) 的内存时,它与相同尺寸的矩阵截然不同,但尺寸为 (4 x 10^6)。

// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

byte[][] test = new byte[4][1000000]; // init

// Measuring memory after -> 6MB as expected
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

byte[][] test = new byte[1000000][4]; // init

// Measuring memory after -> 30MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
 Runtime.getRuntime().freeMemory())/(1000*1000)+"M");

在第一种情况下,我得到 6MB,因此阵列按预期占用 4MB。然而,在第二种情况下,矩阵需要 28MB。为什么它们不相等?

最佳答案

差异在于开销。对于每个数组,Java 都必须保存信息。它只是 4 个长数组与 1000000 个短数组。

关于java - 在二维数组中切换数组大小需要不同的内存量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59995320/

相关文章:

java - 整数数组背后的原因

javascript - 插入新数组并对新数组的结果求和

java - Java中从内存中删除一个对象

Windows - 提交大小与虚拟大小

c++ - 内存错误c++ private int

java - Spring Boot 测试 : Test Response throws "Could not find acceptable representation" , App 正常运行

java - Android JUnit 测试应用类

Java单个日志文件

java - 使用java更改Web服务器上的php文件中的字符串?

arrays - 查找峰值元素(多个)SWIFT