数组的空间占用

112 阅读1分钟

空间占用

在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 java中的数组本质是一个对象,包括对象头部分和数据部分

Java 中数组结构为

  • 8 字节 markword(记录哈希码,垃圾回收时的对象年龄.对象加锁的信息)
  • 4 字节 class 指针(对象类型,压缩 class 指针的情况)
  • 4 字节 数组大小(决定了数组最大容量是 2^{32})
  • 数组元素 + 对齐字节(java 中所有对象大小都是 8 字节的整数倍12,不足的要用对齐字节补足)

例如

 int[] array = {1, 2, 3, 4, 5};

的大小为 40 个字节,组成如下

 8 + 4 + 4 + 5*4 + 4(alignment)

随机访问性能

因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,即根据索引查找元素,知道索引就是间接知道了元素地址,知道了数组的数据起始地址 BaseAddress,就可以由公式 BaseAddress + i * size 计算出索引 i 元素的地址,和数据规模没有关系,时间复杂度是 O(1)