java - 如果我从不实例化某些子数组,则会为二维数组分配多少空间?

标签 java arrays multidimensional-array

所以我正在开发一个 Java 程序,它将每秒多次更新 2D 数组。最初,我使用 System.arrayCopy() 复制整个数组,但这显然是一个坏主意,因为我一次只更新一行。相反,我决定只使用一个指向数组的虚拟“零”的“指针”。不管怎样,我也希望能够支持动态调整大小,我想到最简单的方法可能是让一个数组保持相同的大小,然后有一个数字来指示虚拟的最大长度大批。我发现自己认为这可能是浪费内存

以上信息只是为了让有人可以告诉我我是否在做一些完全荒谬的事情。

TL;DR = 如果我执行以下操作...

int[][] data = new int[2000][]; // 2000 would be the max
for(int i=0; i<10; i++) {
    data[i] = new int[10];
}

...除了我实际初始化的一百个整数之外,我还使用了多少内存?每个空引用只是 4 个字节吗?

最佳答案

每个 null 引用占 4 个字节,加上 header 的 8-16 个字节。大多数 64 位 JVM 使用 32 位引用,堆大小最多约为 30 GB。

关于java - 如果我从不实例化某些子数组,则会为二维数组分配多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060305/

相关文章:

java - 无法使用扫描仪读取特定信息的问题

c - C 中多维数组的存储顺序

javascript - 为什么这个函数返回 "undefined"而不是数组?

java - Java 中的 MinHeap 和 MaxHeap 实现

java - 如何通过 Hibernate 在 mysql 中获取枚举类型的所有可能值

java - 框架 2 位于框架 1 内

java - 根据输入参数调用不同类的方法

arrays - block 方法 - 如何一起计算数组 - ruby

python - 我可以从函数参数中拆分一个数组吗

c - 如何使用 Objective-C 对象的二维 C 数组?