我在 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/