阵列占用多少空间?

ban*_*ara 6 java arrays

如果我创建10个整数和10个整数数组,那么占用的总空间是否会有任何差异?

我必须创建一个包含数百万条记录的布尔数组,因此我想了解数组本身将占用多少空间.

Ste*_*n C 5

整数数组表示为保存整数的内存块和对象标题.对于32位JVM,对象头通常需要3个32位字,但这取决于平台.(标头包含一些标志位,对类描述符的引用,基本锁定信息的空间以及实际数组的长度.加上填充.)

因此,10个整数的数组可能占用13 * 4字节区域.

在a的情况下Integer[],每个Integer对象都有一个2字的标题和1个包含实际值的字字段.您还需要添加填充和1个字(或64位JVM上的1到2个字)作为参考.这通常是每个元素的5个字或20个字节...除非某些Integer对象出现在数组的多个位置.


笔记:

  1. 实际用于64位JVM上的引用的字数取决于是否使用"压缩oops".
  2. 在某些JVM上,堆节点以16个字节的倍数分配...这会扩大空间使用量(例如上面提到的填充).
  3. 如果您获取对象的标识哈希码并且它在下一个垃圾收集中存活,则其大小会膨胀至少4个字节以缓存哈希码值.
  4. 除了上面列举的可变性来源之外,这些数字都是版本和供应商特定的.