Java中2d数组的大小

时间:2013-11-11 18:48:17

标签: java size multidimensional-array

我在Java中定义了一个2d数组。当我读到它时(即2d数组),这个2d数组的第一个维度是一个指针(我不知道它是否正确,请告诉我它)。那么如果我把它看作指针,在64位系统中,执行后下面代码的大小是多少?

    short [][] array1 = new short [10][];
    short[][] array2 = new short[10][];
    for (int i = 0; i < 10; i++)
        array1[i] = new short[1];
    for (int i = 0; i < 10; i++)            
            array2[i] = array1[i];         

请告诉我上面代码的大小。

1 个答案:

答案 0 :(得分:2)

对于每个一维数组,除了数组中数据的空间外,还有24字节的开销。

  • 所以你的前两行代码分别创建了一个包含10个指针的数组 - 你是对的 - 在64位系统上每个需要8个字节。这意味着您要分配2 *(24 + 10 * 8)= 208个字节。
  • 在第一个for循环中,您将创建10个数组,每个数组为24 + 2 * 10 = 44个字节。它们被填充到至少8个字节的边界,因此总共占用48个字节或480个字节。
  • 在第二个循环中,您没有分配任何新内存。
  • 总共使用208 + 480 = 688字节。

请注意,实际使用情况取决于JVM。例如:

为了看到外部和内部数组之间的区别,重写代码可能会有所帮助:

short[][] outerArray = new short[10][]; // Array of references to short arrays
short[] innerArray;                     // Array of shorts
for (int i = 0; i < 10; i++) {
  innerArray = new short[1];
  outerArray[i] = innerArray;
}