Java数组初始化为零大小

9
在Java中声明数组时,我们必须使用new关键字动态分配内存。
class array
{
  public static void main(String ars[]) { 
    int A[] = new int[10];
    System.out.println(A.length);
  }
}

上述代码将创建一个包含10个元素的1D数组,每个元素为4个字节。输出将为10。 但是,当您运行以下相同的代码时:
class array { 
  public static void main(String ars[]) {
    int A[] = new int[0];
    System.out.println(A.length);
  }
}

输出为0。我想知道当您编写new int[0]时,Java是否会为数组分配一些内存?如果是的话,分配了多少内存?

1个回答

10

是的,它会分配一些内存,但分配的量取决于JVM的实现方式。您需要以某种方式表示:

  1. 一个唯一的指针(以便数组与每个其他的new int [0]不同),因此至少1个字节
  2. 类指针(用于Object.getClass())
  3. 哈希码(用于System.identityHashCode)
  4. 对象监视器(用于synchronized (Object))
  5. 数组长度

JVM可能执行各种优化(如果它没有被GC/relocate,则从对象指针中派生系统哈希码,使用单个位来表示从未锁定的对象,使用单个位来表示空数组等),但它仍然必须分配一些内存。

编辑:例如,按照此帖子中的步骤,我的JVM报告 new int [0] 的大小为16,而 new int [4] 为32。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接