Java数组初始化为零大小

时间:2015-05-16 05:27:27

标签: java arrays dynamic-memory-allocation

在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 个答案:

答案 0 :(得分:10)

是的,它会分配一些内存,但数量会因JVM实现而异。你需要以某种方式表示:

  1. 一个唯一的指针(这样数组就是!=每隔一个新的int [0]),所以至少有1个字节
  2. 类指针(用于Object.getClass())
  3. 哈希代码(适用于System.identityHashCode)
  4. 对象监视器(用于synchronized(对象))
  5. 数组长度
  6. JVM可能会执行各种优化(如果尚未进行GC /重定位,则从对象指针派生系统哈希代码,使用单个位表示永不锁定的对象,使用单个位表示空数组等),但仍需要分配一些内存。

    修改:例如,按照this post上的步骤操作,我的JVM报告new int[0]的大小为16,new int[4]的大小为32。