数组对象的形状和结构(如int值数组)与标准Java对象类似。主要区别在于数组对象有一个额外的元数据,用于表示数组的大小。
数组的最大尺寸为2^31 = 2147483648,但是需要8bytes的存储大小表示数组的长度等元数据。所以数组的大小定义为Integer.MAX_VALUE - 8。
数组对象的元数据:
- Class:只想描述对象类型的类信息的指针。
- Flag:描述对象状态的标志的集合,包括对象的散列码以及对象的形状(即对象是否为数组)。
- Lock:对象的同步信息(即对象当前是否同步)。
- Size:数组的大小。