在Java中,字符数据类型char
用2个字节表示。n
字符的数组char[]
用2n+24
字节表示。
一般来说,用于存储n
对象的阵列(至少如果对象是基元类型)存在24
字节的开销。
为什么我们需要这些额外的24字节?它们是如何使用的?
编辑(2015年7月2日)我在一条评论中注意到,程序员StackExchange在这里提供了这个问题的答案。
它是对象头,它包括关于对象本身的信息(锁定位、GC的标记位)、指向其类对象的指针和长度。
除了对象标题和长度前缀外,所有java对象还必须对齐,通常是指针大小,可能是指针大小的倍数(可以选择调整对象对齐)。
对齐的需要意味着,如果后续对象不能正确对齐,那么每个对象的末尾都必须填充,从而数组也必须填充。对于byte[]
阵列,这种担忧将最为突出。