Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中数组内存使用开销的原因是什么?_Java_Arrays_Performance_Jvm_Vm Implementation - Fatal编程技术网

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

Java中数组内存使用开销的原因是什么?,java,arrays,performance,jvm,vm-implementation,Java,Arrays,Performance,Jvm,Vm Implementation,在Java中,字符数据类型“char”用2个字节表示。n字符数组,char[],用2n+24字节表示 一般来说,存储n对象数组的开销为24字节(至少如果对象是基元类型) 为什么我们需要这些额外的24字节?它们是如何使用的 编辑(2015年7月2日)我在一篇评论中注意到,程序员StackExchange上提供了这个问题的答案。它是对象标题,它包括关于对象本身的信息(锁定位、GC的标记位),指向其类对象和长度的指针。除了对象头和长度前缀之外,所有java对象还必须对齐,通常是指针大小,可能是指针大小

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

一般来说,存储
n
对象数组的开销为
24
字节(至少如果对象是基元类型)

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


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

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

除了对象头和长度前缀之外,所有java对象还必须对齐,通常是指针大小,可能是指针大小的倍数(有一个选项可以调整对象对齐方式)


对齐的需要意味着如果后续对象不能正确对齐,则每个对象都必须有填充端,因此数组也必须有填充端。这一问题在
byte[]
数组中最为突出。

答案是数组的长度可能会成为其中的一部分(这使得java不会意外地在数组之后读入垃圾-有人会心血bug吗?)