繁体   English   中英

Java-Integer []和int []的内存差异

[英]Java - Integer[] and int[] memory difference

我试图了解Integer数组和int数组之间的内存成本差异的一般概念。 尽管似乎有很多关于原始int和Integer对象之间差异的信息,但对于如何计算int []和Integer []数组的内存开销(开销开销),我还是有些困惑,填充等)。

任何帮助,将不胜感激。 谢谢!

除了存储数组的长度以外,一个int的数组还需要N个4字节元素的空间,而一个Integer的数组则需要N个引用的空间,后者的大小与平台有关。 通常,在32位平台上为4字节,在64位平台上为8字节。

int[]而言,不需要额外的内存来存储数据。 另一方面, Integer[]需要类型为Integer对象,这些对象可以是完全不同的或共享的(例如,通过Java平台本身实现的小数的求和)。 因此, Integer[]最多需要N个附加对象,每个对象都包含一个4字节的int

假设Integer[]数组中的所有Integer是不同的对象,则该数组及其内容将占用int[]数组空间的2至3倍。 另一方面,如果所有对象都共享,并且考虑了共享对象的内存成本,则可能根本没有额外的开销(在32位平台上),或者在64位平台上会有2倍的开销。

是对jdk6u26的比较,该数组的大小为1024个Integer ,而不是1024个int 请注意,在Integer[]数组包含少量Integer的情况下,可以通过自动包装缓存将它们与JVM中这些Integer的其他用法共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM