当我在 Java 中定义一个 4d 数组(如
var f = new float[1000][3][250][250];
)时,它仅在堆内存上占用 797 MB,但是当我像 var f = new float[1000][250][250][3];
那样定义它时,它在堆上占用 2273 MB(大约大 3 倍)。有人可以解释一下原因吗?为什么维度排列对内存消耗影响这么大?
它不是应该占用大约 750 MB 的空间吗(1000×3×250×250×(4 字节浮点数)= 750)?
java中没有真正的多维数组的概念,这就是你犯错误的地方。 在Java中,float[][]将被称为float类型数组的数组。简而言之,java 不会像 c 或 c++ 那样为多维数组(数组的数组)分配内存。
这里有更详细信息的参考 为什么Java没有真正的多维数组?