java - 为大小为 10,000 x 10,000 x 10,000 的 3D 数组分配了多少 GB?

标签 java memory multidimensional-array size

我问How do I make a large 3D array without running out of memory? ,我收到了很多答案。所有答案基本上都说同样的事情,但有一点细微的差别。每个答案都声称我的 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 个字节,并且该数字也可能需要舍入以考虑内存粒度。对于较大的数组,这两个因素对数组大小的影响很小。

对于所有其他维度,其公式相同,但元素类型始终为引用。每个元素的字节数为 4(对于使用压缩 OOPS 的 32 位 VM 和 64 位 VM)或 8(不带压缩 OOPS 的 64 位 VM)。

从这里开始就是简单的数学计算。

关于java - 为大小为 10,000 x 10,000 x 10,000 的 3D 数组分配了多少 GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239272/

相关文章:

multidimensional-array - F# 将 Array2D 转换为数组数组

Java反射设置属性

Java:使用 BufferedReader 检查字符串中的更改

java - 在 '?' 附近使用的正确语法

java - 用于跨字段验证的 hibernate validator

Linux RSS 和共享内存

java - Jetty 在其中一台计算机中使用了过多的 RSS 内存。如何减少

python-3.x - 返回多维数组中N个最大值的索引(可以求一维的解,但不能求多维的)

ios - ios:读取大文件时的内存使用情况

python - Cython:将 2D 数组从 Python 传递到 C 并检索它