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

时间:2015-07-02 10:38:12

标签: java arrays performance jvm vm-implementation

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

通常,存储24个字节的开销用于存储n个对象的数组(至少如果对象是基本类型的话)。

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

对齐的必要性意味着如果后续对象不能正确对齐,则必须有每个对象的填充结束 - 因此必须是数组。对于set_fact数组,这种担忧最为突出。