如何计算java数组内存的使用情况

xde*_*000 14 java arrays

如果我有:

int c[] = new int[10];
Run Code Online (Sandbox Code Playgroud)

int a[][] = new int[2][3];
Run Code Online (Sandbox Code Playgroud)

一般而言

一个n*m*..*j数组

如何考虑参考变量,我如何计算实际内存使用量?

Jør*_*ogh 16

如果你想要一个准确的答案,你就不能.至少没有任何简单的方法.这个帖子解释了更多.

Bragaadeesh和Bakkal答案的麻烦在于它们忽略了开销.每个数组还存储诸如它具有的维数,它有多长以及垃圾收集器使用的一些东西之类的东西.

对于一个简单的估计,你可以使用其他答案的计算并添加100-200字节.

  • @ xdevel2000:Java没有多维数组.只有数组的数组. (5认同)
  • 这个答案是正确的。由于类型/GC 信息等原因,总会有开销。此外,Java 没有真正的多维数组,只有锯齿状数组,最终会产生相当多的开销。 (2认同)

小智 13

我知道我有点迟到了,但计算内存占用并不是非常困难.

让我们举个例子: int c[] = new int[N];

根据64位内存模型,int是4个字节,因此所有元素的大小都是4*N字节.除此之外,Java具有24字节的数组开销,并且实际的数组对象也有8个字节.这样总共有32 + 4*N字节.

对于二维数组: int a[][] = new int[N][M];

它基本上是相同的,只是第一个数组中的每个元素都是另一个大小为M的数组,因此我们不是4而是32 + 4*M,所以总大小为32 +(32 + 4*M)*N.

确实,D维的推广非常复杂,但你明白了.