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

2022-09-02 11:47:17

如果我有:

int c[] = new int[10];

int a[][] = new int[2][3];

和一般

数组n*m*..*j

如何计算实际内存使用情况,同时考虑引用变量?


答案 1

我知道我有点迟到了,但计算内存占用量真的不是很难。

让我们举第一个例子: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 维度的泛化非常复杂,但你明白了。


答案 2

如果你想要一个准确的答案,你不能。至少不是以任何简单的方式。此线程解释了更多内容。

布拉加德什和巴卡尔的答案的问题在于他们忽略了头顶。每个数组还存储诸如它具有的维度数,长度以及垃圾回收器使用的一些内容之类的内容。

对于简单的估计,通过使用其他答案的计算并添加100-200字节,您应该没问题。