Java中数组的内存使用开销的原因是什么



在Java中,字符数据类型char用2个字节表示。n字符的数组char[]2n+24字节表示。

一般来说,用于存储n对象的阵列(至少如果对象是基元类型)存在24字节的开销。

为什么我们需要这些额外的24字节?它们是如何使用的?

编辑(2015年7月2日)我在一条评论中注意到,程序员StackExchange在这里提供了这个问题的答案。

它是对象头,它包括关于对象本身的信息(锁定位、GC的标记位)、指向其类对象的指针和长度。

除了对象标题和长度前缀外,所有java对象还必须对齐,通常是指针大小,可能是指针大小的倍数(可以选择调整对象对齐)。

对齐的需要意味着,如果后续对象不能正确对齐,那么每个对象的末尾都必须填充,从而数组也必须填充。对于byte[]阵列,这种担忧将最为突出。

最新更新