在
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.我想知道当你写新的int [0]时,Java会为数组分配一些内存吗?如果是多少?
解决方法
是的,它分配一些内存,但数量因JVM实现而异.你需要以某种方式代表:
>一个唯一的指针(使数组是!=每隔一个新的int [0]),所以至少要有1个字节
>类指针(对于Object.getClass())
>哈希码(System.identityHashCode)
>对象监视器(用于synchronized(对象))
>数组长度
JVM可以执行各种优化(如果尚未GC /重新定位,则从对象指针导出系统散列代码,使用单个位来表示未锁定的对象,使用单个位来表示空数组)等等),但它仍然需要分配一些内存.
编辑:例如,按照this post上的步骤,我的JVM报告新的int [0]的大小为16,而对于新的int [4]则为32.
原文地址:https://www.jb51.cc/java/124317.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。