【问题标题】:Java array initialization with zero size大小为零的 Java 数组初始化
【发布时间】:2015-07-28 03:00:24
【问题描述】:

在 java 中声明一个数组时,我们必须使用 new 关键字动态分配内存。

class array
{
  public static void main(String ars[]) { 
    int A[] = new int[10];
    System.out.println(A.length);
  }
}

以上代码将创建一个包含 10 个元素的一维数组,每个元素 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 是否为数组分配一些内存?如果是的话多少钱?

【问题讨论】:

    标签: java arrays dynamic-memory-allocation


    【解决方案1】:

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

    1. 一个唯一的指针(因此数组是 != 每隔一个新的 int[0]),所以至少 1 个字节
    2. 类指针(用于 Object.getClass())
    3. 哈希码(用于 System.identityHashCode)
    4. 对象监视器(用于同步(对象))
    5. 数组长度

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 2021-06-08
      • 2018-07-21
      相关资源
      最近更新 更多