为大小为 10,000 x 10,000 x 10,000 的 3D 数组分配了多少 GB?
How many GB is allocated for a 3D array of size 10,000 x 10,000 x 10,000?
我问了,得到了很多答案。所有的答案基本上都说了同样的话,但有一个细微的差别。每个答案都要求我的 10,000 x 10,000 x 10,000 数组有不同的大小。 (931 GB、931 * 4 GB、4 TB、3725 GB 等)
如何确定3D数组需要分配的内存?
由于java将多维数组实现为数组的数组,因此需要考虑的变量相对较多。
最里面(最后一个维度)一般遵循公式:
sizeOf = (number of bytes per element) * (number of elements) + (fixed overhead)
固定开销大约为 12 个字节,该数字可能也需要四舍五入以考虑内存粒度。对于较大的阵列,这两个因素对阵列大小的贡献很小。
对于所有其他维度,其公式相同,但元素类型始终是 Reference。每个元素的字节数为 4(对于使用压缩 OOPS 的 32 位 VM 和 64 位 VM)或 8(没有压缩 OOPS 的 64 位 VM)。
从那里开始它的简单数学。
我问了
如何确定3D数组需要分配的内存?
由于java将多维数组实现为数组的数组,因此需要考虑的变量相对较多。
最里面(最后一个维度)一般遵循公式:
sizeOf = (number of bytes per element) * (number of elements) + (fixed overhead)
固定开销大约为 12 个字节,该数字可能也需要四舍五入以考虑内存粒度。对于较大的阵列,这两个因素对阵列大小的贡献很小。
对于所有其他维度,其公式相同,但元素类型始终是 Reference。每个元素的字节数为 4(对于使用压缩 OOPS 的 32 位 VM 和 64 位 VM)或 8(没有压缩 OOPS 的 64 位 VM)。
从那里开始它的简单数学。