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

11
在Java中,字符数据类型char使用2个字节表示。包含n个字符的char[]数组需要2n+24字节来表示。
通常情况下,存储包含n个对象(至少是原始类型)的数组需要额外的24字节开销。
为什么我们需要这额外的24个字节?它们如何被使用? 编辑(2015年7月2日):在评论中指出,在程序员StackExchange上提供了对此问题的答案(链接)

3
答案在这里:http://programmers.stackexchange.com/questions/162546/why-the-overhead-when-allocating-objects-arrays-in-java - Ajith John
1
数组的长度可能是其中的一部分(这使得Java不会意外地读取数组后面的垃圾 - 心脏出血漏洞?) - Richard Tingle
2个回答

3

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


2
除了对象头和长度前缀外,所有的Java对象都需要对齐,通常是指针大小,可能是其倍数(有一种选项可以调整对象对齐方式)。
对齐的需求意味着如果后续对象无法对齐,则必须在每个对象 - 以及数组 - 的末尾进行填充。这个问题最突出的是byte[]数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接