gpt4 book ai didi

大小为零的 Java 数组初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:56:22 27 4
gpt4 key购买 nike

在 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 是否为数组分配了一些内存?如果是,多少钱?

最佳答案

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

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

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

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

关于大小为零的 Java 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30272160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com